繁体   English   中英

如何基于两个给定点和描述圆弧段的给定高度绘制圆弧?

[英]How do I draw an arc based on two given points and a given height describing a circle segment?

我正在尝试基于两个给定点和描述圆弧段的给定高度绘制弧。 为了实现这一点,我将使用java.awt.Graphics中的以下方法。

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

首先,我观察到x,y,width和height值描述了一个包含圆的矩形。

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

首先,我首先计算x,y,width和height值。 下图描述了我将如何做到这一点。

在此输入图像描述

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

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));

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

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

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

如果我要计算中心点,我可以很容易地找到x,y,whith和height坐标。

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

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

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

提前致谢!

在弦长半径,弧的高度(也称为sagitta )和半径之间存在着名的关系(例如,见这里 )。 设弦长(p 1和p 2之间的距离为l = 2 d ,让弧高为h ,半径为r 。然后

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

中心位于弦的垂直平分线上,距离弦的距离为r - h ,位于弧的相对侧。 1然后,您可以使用标准反向触发功能来获得和弦的起始和结束角度。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM