Java Swing - 在Jpanel上使用Graphics.DrawArc(...)绘制弧

时间:2017-09-23 06:35:36

标签: java swing

我试图在具有圆弧中心,弧的起点和终点的用户输入上在Jpanel上绘制弧。 这是我目前的

int x1 = 300; //start point
int y1 = 300;
int x2 = 350; //center point of arc
int y2 = 350;
int x3 = 300; //end point of arc
int y3 = 400;
int h1 = y1 - y2; //calculate with and height from start-center and center-end
int d1 = x2 - x1;
int h2 = y2 - y3;
int d2 = x3 - x2;
int startangle = (int)(Math.atan(h1 / d1) * 180 / Math.PI);
if (x2 > x1 && y2 > y1) {
 startangle = 180 - startangle;
} else if (x2 < x1) {
 //change sign
} else if (y1 < y2) {
 //change sign
}
System.out.println("x1,y1\n" + x1 + "\n" + y1 + "\n" + d2 / h2 + "\n" + Math.atan(d2 / h2) * 180 / Math.PI);
int endangle = (int)(Math.atan2(x3, y3) * 180 / Math.PI);
System.out.println("args: " + "\n" + x2 + "\n" + y2 + "\n" + startangle + "\n" + endangle + "\n");
g2.drawArc(x1, y1, d1, h1, startangle, startangle);
g2.drawArc(x2, y2, d2, h2, 0, endangle);

然而,我没有得到屏幕上的弧,几乎与它无关(其他形状有效,但不是这个)。没有抛出错误或异常。

编辑:感谢@ MadProgrammer的评论,我得到了一个形状,但不是我所期待的。

我得到了什么: two not connected arcs 我对同一组坐标的期望是: enter image description here

编辑2:设法通过使用贝塞尔曲线而不是弧

来使其工作

2 个答案:

答案 0 :(得分:0)

使用贝塞尔曲线并使用计算的控制点而不是drawArc方法在两个阶段(开始 - 中间,中间)绘制四边形曲线。

答案 1 :(得分:-2)

我认为drawarc的边界矩形是圆弧所在的椭圆的高度和宽度。