我正在制作饼图,其中我绘制了具有已知扫描角度的弧。现在我想在每个弧的中心显示标签,或者说从每个弧的中心画一条线。
鉴于我知道中心坐标,起始坐标,扫掠角和半径,我想计算结束坐标。
我也尝试过绘制一个匹配所有坐标的三角形并使用距离公式,但我不知道如何在java中求解方程式。
请给我一个合适的解决方案。
答案 0 :(得分: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_x
是A
的x分量(类似于A_y
)。然后
newpoint = centre + (newpoint_x,newpoint_y)
是你想要的。可能是该点出现了错误的旋转方式(逆时针方向),如果是这样,只需使用
theta = -theta
代替。这应该适合你。
如果要评估弧的中点,只需使用
theta = theta / 2
答案 1 :(得分: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
并将此矩阵应用于起始点(多重矩阵和向量)