我正在制作一个饼图,其中绘制了已知扫描角的弧形。现在我想在每个弧形的中心显示标签或者说从每个弧形的中心绘制一条线。
既然我知道中心坐标、起始坐标、扫描角和半径,我想要计算结束坐标。
我也尝试了通过绘制匹配所有坐标的三角形并使用距离公式来解决问题,但我不知道如何在Java中解决方程组。
请给我提供一个合适的解决方案。
使用向量进行操作。令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_x
是 A
的x分量(A_y
同理)。然后
newpoint = centre + (newpoint_x,newpoint_y)
您需要的是这个点。可能会出现点以错误的方式(逆时针)旋转,如果是这样,请使用
theta = -theta
theta = theta / 2
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
并将此矩阵应用于起始点(矩阵乘以向量)