【问题标题】:How do I draw an arc based on two given points and a given height describing a circle segment?如何根据两个给定点和描述圆段的给定高度绘制圆弧?
【发布时间】:2014-02-04 13:13:56
【问题描述】:

我正在尝试根据两个给定点和一个给定高度来描述一个圆弧段。为此,我将使用 java.awt.Graphics 中的以下方法。

drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)

首先我观察到 x、y、宽度和高度值描述了一个包含圆的矩形。

圆弧的中心是矩形的中心,其原点为 (x, y),其大小由宽度和高度参数指定。 (http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html)

首先我从计算 x、y、宽度和高度值开始。下图描述了我将如何做到这一点。

第一张图片显示了我已经获得的价值观。第一张图片中的弧线正是我想要画的。在第二张图片中,我计算了两点之间的线的长度。我执行此步骤的代码如下所示:

int dx = p1.x- p2.x;
int dy = p1.y - p2.y;
double len = Math.sqrt(Math.pow((double)dx, 2) + Math.pow((double)dy, 2));

如图三所示,我现在可以使用以下函数计算圆的半径。

radius = h/2 + len^2 / 8h

我遇到的第一个问题是计算圆的CenterPoint。这部分是我需要帮助的地方。

如果我要计算中心点,我可以轻松找到 x、y、whith 和高度坐标。

x = centerPoint.x - radius;
y = centerPoint.y - radius;
width = radius * 2;
height = radius * 2;

最后一部分是根据我们已经计算的值来计算 startAngle 和 arcAngle。

TL;DR我需要帮助来计算角度和中心点。

提前致谢!

【问题讨论】:

标签: java graphics geometry trigonometry segment


【解决方案1】:

弦半长、弧高(也称为 sagitta)和半径之间存在众所周知的关系(例如,参见 here)。设弦长(p1和p2之间的距离为l = 2d,设弧高度为h,半径为r。然后

r = (d 2 + h 2) / (2 h)

中心在弦的垂直平分线上,距离弦r - h,在圆弧的另一侧。1 然后,您可以使用标准的反三角函数来获取和弦的开始和结束角度。

 1 注意,知道p1p是不够的2h;您需要一些方法来确定和弦的哪一侧有中心,哪一侧有弧线。

【讨论】:

    猜你喜欢
    • 2014-05-12
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    相关资源
    最近更新 更多