如何在圆弧中间绘制文本? (用于饼图)

时间:2019-02-28 14:15:33

标签: java geometry awt java-2d

我正在使用对drawArc的一系列调用来绘制饼图,如下所示:

g.fillArc(x, y, w, h, startAngle, arcAngle);

我无法解决的是如何在圆弧的中间显示文本,以显示%。是否可以使用一些方程式获取绘制的任何弧的中心点?

1 个答案:

答案 0 :(得分:2)

圆弧的中心点是

cx = x + w/2
cy = y + h/2

圆弧的中间角是

Fi = startAngle + arcAngle/2 

Radius at angle Fi is(由于使用w / h而不是a / b而增加了0.5)

r = 0.5 * w * h / Sqrt((h*Cos(Fi))^2 + (w*Sin(Fi))^2)

圆弧的中点是

mx  = cx + r * Cos(Fi)
my  = cy + r * Sin(Fi)

示例

x = 100 y=100 w=400 h=200
start = 0 sweep = 90 degrees = Pi/2
cx = 300  cy = 200
fi  = pi/4
r = 200 * 100 / Sqrt((200^2 * 1/2 + 100^2 * 1/2)) = 
     20000 / Sqrt(20000 + 5000) = 
     20000 / 158 = 126
mx = 300 + 126 * 0.707 = 389
my = 200 + 253 * 0.707 = 289