我想知道如何计算圆上的坐标。为了简单起见,我做了一些图像。
这是从我掌握的信息开始的。现在我需要计算新的坐标,例如,当圆向右旋转90度时。如下图所示:
我需要计算新红点的坐标。(我也需要不同度数的,比如20度)。
为此,我的计划如下:
我的第一步是:
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编辑:
我的价值观是:
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,因此该点不应转动。它应该保持490728的坐标,但不保持这些坐标。
实现这一点的一个优雅方法是使用复数,例如这里提供的复数。
在伪代码中:
z = (x_old + I*y_old)*exp(I*angle);
x_new = real(z);
y_new = imag(z);
注意:旋转角度
需要以弧度为单位。注2:这假设一个以(0,0)为中心的圆。如果中心不在那里,只需添加一个移位。
这里需要一些数学。你需要知道如果两行相互垂直,这两行梯度的乘法应该等于-1
。
然后
m1=(770-500)/(540-400)=27/14
同样的方式
m2=(y-770)/(x-540)
(x, y)
是要查找的点。
现在
m1*m2=-1
现在我们得到一个等式。您需要另一个,因为需要找到两个变量
考虑到圆的半径,你可以得到另一个。
r=sqrt((540-400)^2+(770-500)^2)
同样的方式
r=sqrl((x-540)^2+(y-770)^2)
现在你得到了两个方程,只需要解。这将为您提供两组坐标。因为可以有-90
和90
度。
就是这样:
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;
}
此方法根据半径和角度计算圆心(视图中心)周围的位置。角度(度数)
返回的PointF
将包含计算位置的x和y坐标。
请注意,0度位于圆的最东位置,270度位于圆的最北位置:
所以如果你的视角中心在x: 100,y: 100,你计算角度为0度,半径为50的位置,结果将是x: 150,y: 100
如果你使用角度90度和半径50,结果将是x: 100,y: 150
它在我的图表库中使用,而且很有效。
我有一个2F长度的柱面,和RotX和RotZ的数据,由用户给出。我也知道我的圆柱体的“底”在(0,0,0)(形成“底”的圆心) 我需要的是计算“顶”点(另一端的圆心),在上面的线条中暴露数据。 在我的第二幅图像中,A点计算如下(sin(zAngle),cos(zAngle),sin(xAngle),zAngle=pi/4(alpha角)和xAngle=0。 点B计算为(sin(xAngle),co
问题内容: 如何在Java中计算两个角度量度(以度为单位)的差,使结果在[0°,180°]范围内? 例如: 问题答案: /* * Shortest distance (angular) between two angles. * It will be in range [0, 180]. / public static int distance(int alpha, int beta) { int
在将此标记为副本之前,我想说,我已经浏览了这么多类似于此、此和此的帖子。但我还没有找到适合我的解决方案。 我正在尝试使用创建一个弹出窗口。我想使用圆角和下拉阴影(如
问题内容: 我已经按照docker安装文档将其安装在运行Ubuntu 12.04的32位计算机上的机器上 步骤 没说 应该已经安装好了吧? 我也知道,Docker当前仅支持64位平台。 有什么方法可以安装它并使它在32位计算机上工作? 问题答案: 根据先决条件: 不管您的Ubuntu版本如何,Docker都需要64位安装。此外,您的内核必须至少为3.10。也可以接受最新的3.10次要版本或更新的维
问题内容: 我需要为自己的Point类计算两个点之间的角度,以度为单位,Point a为中心点。 方法: 测试1://返回45 测试2://返回-90,预期值:270 如何将返回的结果转换为0到359之间的数字? 问题答案: 您可以添加以下内容: 顺便说一句,为什么您不想在这里使用双精度?
问题: 给定n个半径为r1的圆...rn和位置p1...pn。该算法必须找到包含所有n个圆的最小半径的圆的半径和圆心。圆的位置和半径是固定的,所以不能移动。 圆圈的结构可以看起来像这样: 输入值:[c1...cn] (c圈) 输出值:c 图像示例: 我的想法: 如果我找到最远的两点之间的距离并将圆心放在这条直线的一半上,我就可以画出包含n个圆的最小圆,但是有可能其他圆与主圆的圆心之间的距离比最远的
我正在学习浮点格式(IEEE)。在单精度浮点格式中,提到尾数有24位,因此它具有6 1/2十进制数字的精度(根据书中“理解机器”),以及7.22十进制数字的精度。 我不明白精度的小数位数是怎么算出来的。有人能告诉我吗?
给定圆心、半径和3个点,我想通过指定开始绘制的角度和旋转的角度,绘制一条从第一个点开始、穿过第二个点并在第三个点结束的圆弧。为此,我需要计算圆弧上的点。我希望计算的点数是可变的,这样我就可以调整计算圆弧的精度,这意味着我可能需要一个循环,在计算完一个点后,通过旋转一点来计算每个点。我已经阅读了这个问题的答案,用2个点和圆心画圆弧,但它只解决了角度计算的问题,因为我不知道如何画画布。实现了“draw