因此,我有一个使用SDO_GEOMETRY创建圆弧的数据库中的查询,这些查询是使用3组点进行的:(xStart,yStart),(xCenter,yCenter),(xEnd,yEnd)
所以想象一下彩虹,中心点在最上面(如X2,Y2所示)

我现在正在尝试翻译它,这样我就可以在Java中使用drawArc()了。然而,drawArc()接受参数,我被困在startArc和arcAngle参数上,不确定如何计算它们。
我看了看周围,还有圆弧的“端点角度”或“圆心角度”,不确定它们是不是相同的东西,我也没有找到计算startArc和arcAngle的好源码。有谁对此很熟悉吗?请分享,谢谢!
发布于 2015-05-10 05:28:32
这应该对你的参数代码有帮助,你可以随时插入你的变量,只要它们是整型的

有用的链接:http://jdrawing.sourceforge.net/doc/0.2.5/api/org/jdrawing/graphics/DrawArc.html http://www.java-examples.com/draw-arc-applet-window-example
发布于 2015-05-10 05:28:59
使用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.pow和denominator的常量来简化方程式。
发布于 2015-05-10 05:17:06
我被困在startArc和arcAngle参数上,不确定如何计算它们。
有许多不同的方法来指定这两个圆弧参数。
一种方法是使用0和180,这意味着您从终点开始,并按逆时针180度绘制一条圆弧,回到起点。(即从API文档中:角度被解释为0度在3点位置。正值表示逆时针旋转,负值表示顺时针旋转)
所以我认为一般的代码应该是:
g.drawArc (x1, y2, x3 - x1, (y2- y1) * 2, 0, 180);https://stackoverflow.com/questions/30144990
复制相似问题