使用的替代方法drawArc
是使用QuadCurve2D(虽然不熟悉您的几何,但如果点未定义对称几何,则可能需要此方法)。您需要计算曲线的控制点,这可以使用贝塞尔曲线方程来完成
B(t) = (1-t)^2 * P0 + 2(1-t)tP1 + t^2 P2
这里,B(t) 是线上的一个点。求解控制点:
P1 = (B(t) - (1-t)^2 * P0 - t^2 P2)/2(1-t)t
对于中心点,t = 0.5:
//example points, assuming center is at 0.5
int[] p1 = {100,50};
int[] center = {200,100};
int[] p3 = {300,50};
double x = (center[0] - Math.pow(0.5, 2) * p1[0] - Math.pow(0.5, 2) * p3[0] ) / (2*(0.5) * 0.5);
double y = (center[1] - Math.pow(0.5, 2) * p1[1] - Math.pow(0.5, 2) * p3[1] ) / (2*(0.5) * 0.5);
QuadCurve2D curve = new QuadCurve2D.Double(p1[0], p1[1], x, y, p3[0], p3[1]);
g.draw(curve);
上面明确显示了用于演示的方程,但可以用 和 的常数来Math.pow
简化denominator
。