Tre*_*ott 5 c# math point angle rotation
我在2D空间的中心点周围旋转点.这些点是中心点,旧鼠标位置和新鼠标位置.我的旋转功能工作正常,我可以完美地计算角度.但是如果用户将鼠标移动到应该被解释为逆时针的方向,我想计算负角度.
例如,如果您高于(小于)中心点的y值,则向右移动鼠标(正x轴)应该顺时针旋转,但如果实际低于(大于),它应逆时针旋转中心点的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);
Run Code Online (Sandbox Code Playgroud)
因此我需要一种方法在需要时使角度为负,因此点顺时针或逆时针旋转以跟随鼠标位置.
试试这个,但我不确定:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4565 次 |
| 最近记录: |