Mar*_*arc 13 java math geometry android
我想弄清楚我怎么能够计算圆上的坐标.为简单起见,我制作了一些图片

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

我需要计算新红点的坐标.(我也需要不同程度,如20度).
要做到这一点,我的计划是做以下事情:
我的第一步是:
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,和它的作品.
| 归档时间: |
|
| 查看次数: |
8438 次 |
| 最近记录: |