查找startAngle和arcAngle以传递到Java Graphics的drawArc()

时间:2015-05-09 21:03:10

标签: java graphics jframe oracle-spatial

所以我从使用SDO_GEOMETRY创建弧的数据库中获得查询,它们使用3组点制作:(xStart,yStart),(xCenter,yCenter),(xEnd,yEnd)

所以想象一下彩虹,中心点在顶部(显示为X2,Y2) Arc example: 我现在正在尝试翻译这个,以便我可以在Java的Graphics中使用drawArc()。但是drawArc()接受参数,我停留在startArc和arcAngle参数,我不知道如何计算它们。

我环顾四周,还有一个弧的“端角”或“中心角”,不确定这些是否是同一个东西,我还没有找到关于如何计算startArc和arcAngle的好资料。有没有人对此有所了解?请分享并感谢!

3 个答案:

答案 0 :(得分:2)

这应该可以帮助您使用参数代码,只要它们是int

,您就可以随时插入变量

enter image description here

有用的链接: http://jdrawing.sourceforge.net/doc/0.2.5/api/org/jdrawing/graphics/DrawArc.html http://www.java-examples.com/draw-arc-applet-window-example

答案 1 :(得分:1)

  

我陷入了startArc和arcAngle参数,我不知道如何计算它们。

有许多不同的方法可以指定两个弧参数。

一种方法是使用0和180,这意味着你从终点开始并逆时针旋转180度弧,回到起点。 (即,来自API文档:角度被解释为0度位于3点钟位置。正值表示逆时针旋转,而负值表示顺时针旋转)< / p>

所以我认为通用代码是:

g.drawArc (x1, y2, x3 - x1, (y2- y1) * 2, 0, 180);

答案 2 :(得分:1)

使用drawArc的替代方法是使用QuadCurve2D(虽然不熟悉几何体,但如果点不定义对称几何体,则可能需要此方法)。您需要计算曲线的控制点,可以使用Bezier curve等式

来完成
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.powdenominator的常量进行简化。