簡體   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