gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 02:26:38 25 4
gpt4 key购买 nike

我正在尝试根据两个给定点和描述圆段的给定高度绘制弧线。为此,我将使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com