我想弄清楚如何能够计算出圆上的坐标。为了简单,我制作了一些图像。如何计算具有一定角度的圆上的位置?
这就是开始用我的信息。现在我需要计算新的坐标,例如圆圈向右转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度,它仍然会返回比原始坐标更多的值。
任何帮助,将不胜感激!
为菲利普Jahoda编辑:
我的价值观是:
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的坐标,但不保留这些坐标。
为什么你不能在整个时间以极坐标工作?仅适用于展示阶段转换为笛卡尔。 – Bathsheba 2014-09-19 08:48:57
否则,此链接可能会对您有所帮助:http://en.wikipedia.org/wiki/Rotation_matrix – Bathsheba 2014-09-19 08:51:27
您正在使用'x'和'y'。请注意,'x'在向右增加,而'y'在向下增加,因此您的'targetPt.y - centerPt.y'部分应该是相反的 – Eypros 2014-09-19 08:59:51