我正在围绕二维空间中的中心点旋转点。这些点是中心点、旧鼠标位置和新鼠标位置。我的旋转功能运行良好,我可以完美地计算角度。但如果用户沿应解释为逆时针方向移动鼠标,我想计算负角度。
例如,如果您位于(小于)中心点的 y 值之上(小于),则向右(正 x 轴)移动鼠标应顺时针旋转,但如果实际上位于(大于)中心点的 y 值,则应逆时针旋转中心点的 y 值。
这是我所拥有的:
PointF centerPoint;
PointF oldPoint;
PointF newPoint;
double Xc = centerPoint.X;
double Yc = centerPoint.Y;
double Xb = oldPoint.X;
double Yb = oldPoint.Y;
double Xa = newPoint.X;
double Ya = newPoint.Y;
double c2 = (Math.Pow(Xb - Xa, 2) + Math.Pow(Yb - Ya, 2));
double a2 = (Math.Pow(Xb - Xc, 2) + Math.Pow(Yb - Yc, 2));
double b2 = (Math.Pow(Xa - Xc, 2) + Math.Pow(Ya - Yc, 2));
double a = Math.Sqrt(a2);
double b = Math.Sqrt(b2);
double val = (a2 + b2 - c2) / (2 * a * b);
double angle = Math.Acos(val);
因此,我需要一种在需要时使角度为负值的方法,以便这些点顺时针或逆时针旋转以跟随鼠标位置。
试试这个,但我不确定:
double v1x = Xb - Xc;
double v1y = Yb - Yc;
double v2x = Xa - Xc;
double v2y = Ya - Yc;
double angle = Math.Atan2(v1x, v1y) - Math.Atan2(v2x, v2y);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)