如何计算具有一定角度的圆上的位置?

Mar*_*arc 13 java math geometry android

我想弄清楚我怎么能够计算圆上的坐标.为简单起见,我制作了一些图片

http://i.stack.imgur.com/y1F2y.png

这是我拥有的信息的开始.现在我需要计算新坐标,例如圆圈向右旋转90度.就像下一张图片一样:

http://i.stack.imgur.com/ckopK.png

我需要计算新红点的坐标.(我也需要不同程度,如20度).

要做到这一点,我的计划是做以下事情:

  • 计算两点之间的距离
  • 计算北(上)和给定点之间的度数
  • 用度数(从后退)+需要转动的度数(在图像中90度)计算新位置.

我的第一步是:

distance = Math.sqrt((point1.x-point2.x)*(point1.x-point2.x) + (point1.y-point2.y)*(point1.y-point2.y))
Run Code Online (Sandbox Code Playgroud)

计算新学位的部分是:

double theta = Math.atan2(targetPt.y - centerPt.y, targetPt.x - centerPt.x);
theta += Math.PI/2.0;
Run Code Online (Sandbox Code Playgroud)

计算新位置的最后一部分是:

double x = mMiddleView.getX() + distance * Math.cos(Math.toRadians(theta));
double y = mMiddleView.getY() + distance * Math.sin(Math.toRadians(theta));
Run Code Online (Sandbox Code Playgroud)

但是,当我使用例如0度进行这些计算时,它仍然返回另一个值而不是原始坐标.

任何帮助,将不胜感激!

编辑Philipp Jahoda:

我的价值观是:

distance +- 70, currentDegree = 0.
PointF point = new PointF((float)mMiddleView.getX(), (float)mMiddleView.getY());
PointF point2 = getPosition(point, (float) distance, currentDegree);
Run Code Online (Sandbox Code Playgroud)

我的结果是:

center: PointF(490.0, 728.0) radius: 78.0 angle: 0.0
new point: PointF(568.0, 728.0)
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,度数是0所以这个点不应该转.它应该保持490,728坐标但不保留它们.

Phi*_*oda 17

这就是如何:

private PointF getPosition(PointF center, float radius, float angle) {

    PointF p = new PointF((float) (center.x + radius * Math.cos(Math.toRadians(angle))),
    (float) (center.y + radius* Math.sin(Math.toRadians(angle))));

    return p;
}
Run Code Online (Sandbox Code Playgroud)

此方法根据半径和角度计算圆的中心(视图中心)周围的位置.角度(度).

返回的PointF将包含计算位置的x坐标和y坐标.

请注意,0度位于圆的最东部位置,270度位于圆的最北部位置:

在此输入图像描述

因此,如果视图的中心位于x:100,y:100,并且您计算角度为0度且半径为50的位置,则结果将为x:150,y:100

如果使用角度90度和半径50,结果将为x:100,y:150

它是用来在这里我的图表libary,和它的作品.