[英]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 1 , p 2和h是不夠的; 你需要一些方法來識別和弦的哪一側有中心,哪一側有弧。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.