4

所以我有来自使用 SDO_GEOMETRY 创建弧的数据库的查询,它们是使用 3 组点进行的:(xStart,yStart),(xCenter,yCenter),(xEnd,yEnd)

所以想象一下彩虹,中心点在最上面(显示为 X2,Y2) 圆弧示例: 我现在正在尝试翻译它,以便我可以在 Java 的图形中使用 drawArc()。但是 drawArc() 接受参数,我被困在 startArc 和 arcAngle 参数上,不知道如何计算这些参数。

我环顾四周,也有弧的“结束角”或“中心角”,不确定它们是否相同,而且我还没有找到关于如何计算 startArc 和 arcAngle 的好资料。有没有人熟悉这个?请分享并谢谢!

4

3 回答 3

3

这应该对您的参数代码有所帮助,只要它们是 int,您就可以随时插入您的变量

在此处输入图像描述

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

于 2015-05-09T21:28:31.777 回答
2

使用的替代方法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

于 2015-05-09T21:28:59.113 回答
1

我被困在 startArc 和 arcAngle 参数上,不知道如何计算它们。

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

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

所以我认为一般代码是:

g.drawArc (x1, y2, x3 - x1, (y2- y1) * 2, 0, 180);
于 2015-05-09T21:17:05.693 回答