2013-03-27 18 views
1

繪製弧形,我已經上搜索計算器類似的問題,並嘗試使用一些建議從其他答案這樣一個實現:使用兩個點作爲參考

Point p1 = prop.getDisplayPoint(); 
Point p2 = prop2.getDisplayPoint(); 

int xCenter = p1.x - 50; 
int yCenter; 

if(p1.y > p2.y) 
     yCenter = p1.y - ((p1.y-p2.y)/2); 
else 
     yCenter = p2.y - ((p2.y-p1.y)/2); 

int r = (int)Math.sqrt((p1.x-xCenter)*(p1.x-xCenter) + (p1.y-yCenter)*(p1.y-yCenter)); 
int x = xCenter-r; 
int y = yCenter-r; 
int width = 2*r; 
int height = 2*r; 
int startAngle = (int) ((180/Math.PI)*Math.atan2(p1.y-yCenter, p1.x-xCenter)); 
int endAngle = (int) ((180/Math.PI)*Math.atan2(p2.y-yCenter, p2.x-xCenter)); 
g.drawArc(x, y, width, height, startAngle, endAngle); 

但還是這個didnt幫助了我。 我試圖計算我的兩點的中心,但弧的結果並不是我正在等待的。

這是結果:

enter image description here

這就是我要找:

Expected result

我每對點我想連接的座標,像在「汽車」點和「公共汽車」點,然後我想在它們之間畫一條弧線。角度永遠是這樣的。

+0

你的輸出是什麼樣的?我猜測是一個半圈,但不想從你的代碼中弄清楚。 – parsifal 2013-03-27 16:39:10

+0

圖像只是一個例子,我的輸出有更多的原子,但曲線遠離我想要的,甚至連接到的地方都沒有...... – TiagoM 2013-03-27 16:44:49

+1

有一個原因,「一張圖片勝過千言萬語」 ;如果你不願意展示一張圖片(最好用你的「x」和「y」位置標識),那麼你將不得不拿出替換它的文字。否則,沒有人可以幫助你。 – parsifal 2013-03-27 17:09:56

回答

4

看着圖片,看起來你有兩個問題。

首先是你的原點不正確。我沒有嘗試特定的值,但我認爲這是因爲你正在計算基於第一個點的任意中心,然後根據該中心點(而不是實際文本位置)計算弧的起點和終點。

但是,我認爲更大的問題是弧線不適合完成任務。有了弧線,你可以選擇一個半圓(或半橢圓),或者三分之一的圓,但這些看起來不會很好。他們當然不會看起來像你想要的例子。

取而代之,你想要一個Bezier Curve,這樣就可以加深「弧」的兩側。 Here's是一個SO問題,它指向了Java2D中貝塞爾曲線函數的文檔。如果你是Google的「java draw bezier」,還有一堆例子。

+0

貝齊爾曲線完全是我尋找的方式;) 非常感謝! – TiagoM 2013-03-27 20:07:16

+0

解決方案:QuadCurve2D.Double cubicCurve =新的QuadCurve2D.Double(p1.x,p1.y,xCenter,yCenter,p2.x,p2.y); \t \t \t \t \t \t g2.draw(cubicCurve); – TiagoM 2013-03-27 20:07:38