java - 如何根据两个给定点和描述圆段的给定高度绘制圆弧?

标签 java graphics geometry trigonometry segment

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

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

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

The center of the arc is the center of the rectangle whose origin is (x, y) and whose size is specified by the width and height arguments. (http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html)

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

enter image description here

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

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 我在计算角度和中心点方面需要帮助。

提前致谢!

最佳答案

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

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

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

1 请注意,仅知道 p1 是不够的,p 2,和h;您需要一些方法来识别和弦的哪一侧有中心,哪一侧有圆弧。

关于java - 如何根据两个给定点和描述圆段的给定高度绘制圆弧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21148084/

相关文章:

java - 我可以以字符串类型的变量为条件吗?

java - Maven : remove a single transitive dependency

java - 具有继承性的 Spring 规范

javascript - Node.js 在屏幕上绘图

php - stackoverflow.com、airbnb.com、google+、facebook.com 等开发中使用的工具?

java - 将 Sprite 的坐标转换为屏幕上的坐标

java - 检测圆形(非精确圆形)路径算法?

Python同质与非同质绘图线

matlab - 在矩阵中填充多边形

java - 如何使用 Java Media Framework (JMF) 发送 rtcp 再见消息?