gpt4 book ai didi

java - 如何计算特定角度的圆上的位置?

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:50 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何计算圆上的坐标。为简单起见,我制作了一些图片。

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))

计算新度数的部分是:

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 度进行这些计算时,它仍然返回原始坐标以外的另一个值。

如有任何帮助,我们将不胜感激!

为 Philipp Jahoda 编辑:

我的值(value)观是:

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 坐标,但它不保留这些坐标。

最佳答案

就是这样:

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;
}

此方法根据半径和角度计算圆心( View 中心)周围的位置。以度为单位的角度。

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

请注意,0 度是在圆的最东位置,270 度是在圆的最北位置:

enter image description here

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

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

它被使用here在我的图表库中,它有效。

关于java - 如何计算特定角度的圆上的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25929820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com