查找startAngle和arcAngle以传递到Java图形的drawArc()中

查找startAngle和arcAngle以传递到Java图形的drawArc()中,java,graphics,jframe,oracle-spatial,Java,Graphics,Jframe,Oracle Spatial,因此,我从一个使用SDO_几何体创建圆弧的数据库中进行了查询,这些查询使用3组点进行:(xStart,yStart),(xCenter,yCenter),(xEnd,yEnd) 想象一道彩虹,中心点在最顶端(如X2,Y2所示) 我现在正试图翻译它,以便在Java的图形中使用drawArc()。但是drawArc()接受参数,我被startArc和arcAngle参数所困扰,不知道如何计算这些参数 我环顾四周,也有弧的“端角”或“中心角”,不确定这些是否是相同的东西,我还没有找到一个关于如何计算星

因此,我从一个使用SDO_几何体创建圆弧的数据库中进行了查询,这些查询使用3组点进行:(xStart,yStart),(xCenter,yCenter),(xEnd,yEnd)

想象一道彩虹,中心点在最顶端(如X2,Y2所示) 我现在正试图翻译它,以便在Java的图形中使用drawArc()。但是drawArc()接受参数,我被startArc和arcAngle参数所困扰,不知道如何计算这些参数

我环顾四周,也有弧的“端角”或“中心角”,不确定这些是否是相同的东西,我还没有找到一个关于如何计算星点角和弧角的好来源。有人熟悉这个吗?请分享,谢谢

我被困在startArc和arcAngle参数上,不知道如何计算这些参数

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

一种方法是使用0和180,这意味着您从终点开始,逆时针绘制180度的圆弧,回到起点。(即,根据API文件:角度被解释为0度处于3点钟位置。正值表示逆时针旋转,负值表示顺时针旋转)

因此,我认为一般准则是:

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

这将有助于您编写参数代码,您可以随时插入变量,只要它们是int

有用链接:

使用
drawArc
的替代方法是使用a(虽然不熟悉几何图形,但如果点未定义对称几何图形,则可能需要此方法)。您需要计算曲线的控制点,这可以使用以下等式完成

这里,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
分母

作为使用<代码> DRAWARC 的替代方案,你可以考虑使用一个实例——你必须根据中心点来计算控制点,但是这是比较简单的数学。
//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);