我正在尝试基于两个给定点和描述圆弧段的给定高度绘制弧。为了实现这一点,我将使用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和高度坐标。
x = centerPoint.x - radius;
y = centerPoint.y - radius;
width = radius * 2;
height = radius * 2;
最后一部分是根据我们已计算的值计算startAngle和arcAngle。
TL; DR 我需要帮助计算角度和中心点。
提前致谢!
答案 0 :(得分:5)
在和弦半长,弧的高度(也称为 sagitta )和半径之间存在一个众所周知的关系(例如,见here)。让和弦长度(p 1 和p 2 之间的距离 l = 2 d ,让弧度高度为 h ,让半径为 r 。然后
r =( d 2 + h 2 )/(2 ħ)
中心位于和弦的垂直平分线上,与弦的距离 r - h ,位于弧的另一侧。 1 然后,您可以使用标准反三角函数来获得和弦的起始和结束角度。
1 请注意,仅知道 p 1 , p 是不够的2 和 h ;你需要一些方法来识别和弦的哪一侧有中心,哪一侧有弧。