2011-06-15 54 views
2

我想知道如何將點連接在一起形成曲線。我在圖表中有20點,並想知道如何加入他們。我試過用GeneralPath對象,但想知道是否有更好的方法?從幾個點繪製曲線

+1

定義'更好'。 – 2011-06-15 15:08:24

回答

1

要建立一個曲線,而不僅僅是行,你可以使用的GeneralPath

public void curveTo(float x1, float y1, float x2, float y2, float x3, float y3) 

它創建貝塞爾曲線的方法。但要計算控制點x1, y1, x2, y2您需要放一些數學,或者下載一些插值庫。

你也可以檢查this question,它有一個鏈接到源代碼實現一些插值算法。

+1

沒有解決通過點路由曲線的關鍵問題。此外,「下載一些插值庫」意味着什麼,控制點不能像這樣生成。 「放一些數學」是可以的,但是模擬貝塞爾曲線的算法需要的算法是真正的彎曲。 – 2011-06-19 18:03:16

3

GeneralPath肯定是最直接的。創建您的路徑,爲您的第一個點調用moveTo,然後爲每個後續點調用lineTo。然後將其繪製到Graphics2D對象。

2

GeneralPath是一個很好的方法,應該很好地處理您的要求,除非您要離開別的東西。 Path2D是一個新的類,可以更精確,但如果你不需要這種精度,那麼GeneralPath就沒有優勢了。

2

貝塞爾想象基於多項式元件上的曲線:

(a + b)^3 = a^3 + 3a^2*b + 3a*b^2 + b^3 

^正「到電源」,而不是「異或」)。他實際上將atb替換爲1-t。所以公式應該是(t + (1 - t))^3(是的,它等於1)。

在這一點上,我們有公式

t^3 + 3*t^2*(1-t) + 3*t*(1-t)^2 + (1-t)^3 

有4個部分。選擇4點。

(x1,y1), (x2,y2), (x3,y3), (x4,y4) 

現在,創建參數方程,通過座標式的每一個部分相乘,如下所示:

x(t) = t^3*x1 + 3*t^2*(1-t)*x2 + 3*t*(1-t)^2*x3 + (1-t)^3*x4 
y(t) = t^3*y1 + 3*t^2*(1-t)*y2 + 3*t*(1-t)^2*y3 + (1-t)^3*y4 

這是三次貝塞爾的參數方程。

你想要一個20次方的Bézier? 「簡單地」開發(t + (1-t))^20

Pascal Triangle應該可以幫到你。