如果已知Android中的圆心和起始坐标以及扫描角度,如何计算弧线的终点坐标?

5

我正在制作一个饼图,其中绘制了已知扫描角的弧形。现在我想在每个弧形的中心显示标签或者说从每个弧形的中心绘制一条线。

既然我知道中心坐标、起始坐标、扫描角和半径,我想要计算结束坐标。

我也尝试了通过绘制匹配所有坐标的三角形并使用距离公式来解决问题,但我不知道如何在Java中解决方程组。

请给我提供一个合适的解决方案。

2个回答

6

使用向量进行操作。令A为从圆心到弧起点的向量。可以通过以下方式计算:

A = start_point - centre

theta 为扫描角度(以弧度计算)。使用旋转矩阵将弧起点绕圆心旋转。 http://en.wikipedia.org/wiki/Rotation_matrix

具体来说,

newpoint_x = cos(theta)*A_x + sin(theta)*A_y
newpoint_y = -sin(theta)*A_x + cos(theta)*A_y

其中 A_xA 的x分量(A_y同理)。然后

newpoint = centre + (newpoint_x,newpoint_y)

您需要的是这个点。可能会出现点以错误的方式(逆时针)旋转,如果是这样,请使用

theta = -theta

而不是。这应该适合你。
如果你想评估弧的中点,只需使用
theta = theta / 2

1
谢谢您的回答。我差不多明白了,但是不知道如何在Java中使用向量(数学上的)。 - Amritpal Singh

1
StartAngle = atan2(StartY-CenterY, StartX - CenterX) 
EndX = CenterX + Radius * Cos(StartAngle + SweepAngle)
EndY = CenterY + Radius * Sin(StartAngle + SweepAngle)

另一种方法: 对矩阵进行乘积。
shift by (Center - Start)
rotation by SweepAngle
back shift

并将此矩阵应用于起始点(矩阵乘以向量)


2
感谢您的支持。上述方法只在SweepAngle < 90时计算端点,因此对于某些情况它有效,而对于其他情况则无效。 - Amritpal Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接