如何计算具有一定角度的圆上的位置?
我试图弄清楚如何计算圆上的坐标。为了简单起见,我制作了一些图像。
这就是我所掌握的信息的开始。现在我需要计算新的坐标,例如,当圆向右转90度时。就像下图一样:
我需要计算新红点的坐标。(我还需要不同程度的这个,例如20度)。
为此,我的计划是执行以下操作:
- 计算两点之间的距离
- 计算北(上)和给定点之间的度数
- 使用度数(从后退一步)+需要转动的度数(在图像中为90度)计算新位置。
我的第一步是:
distance = Math.sqrt((point1.x-point2.x)*(point1.x-point2.x) + (point1.y-point2.y)*(point1.y-point2.y))
计算新度的部分是:
double theta = Math.atan2(targetPt.y - centerPt.y, targetPt.x - centerPt.x);
theta += Math.PI/2.0;
计算新位置的最后一部分是:
double x = mMiddleView.getX() + distance * Math.cos(Math.toRadians(theta));
double y = mMiddleView.getY() + distance * Math.sin(Math.toRadians(theta));
但是,当我以例如0度进行这些计算时,它仍然返回比原始坐标另一个值。
任何帮助将不胜感激!
编辑菲利普·贾霍达:
我的价值观是:
distance +- 70, currentDegree = 0.
PointF point = new PointF((float)mMiddleView.getX(), (float)mMiddleView.getY());
PointF point2 = getPosition(point, (float) distance, currentDegree);
我的结果是:
center: PointF(490.0, 728.0) radius: 78.0 angle: 0.0
new point: PointF(568.0, 728.0)
如您所见,度数为0,因此该点不应转动。它应该保留490,728坐标,但它不保留这些坐标。