2009-11-23 193 views
2

我正在使用貝塞爾曲線來繪製我正在製作的程序中的曲線。我有五點。 這是我想要創建的曲線的粗略草圖。我試圖製作一條經歷A,B,C,D的曲線。但是,C並不是一個確定的點,它是曲線應該通過的位置以使其看起來像法國曲線的建議。 C在45度從E出來。貝塞爾曲線和法國曲線

This is an illustration of what I am trying to do.

有沒有人對如何近似法國曲線,將經過這些點什麼建議嗎?

+1

我不太明白你想做什麼。你可以在插圖中填入更多想要的曲線嗎? – 2009-11-23 20:19:49

+0

要麼它通過C或它不,所以請澄清問題。它是否通過E?你說「C從45度出來。」我可以從圖表中看到,但爲什麼?那裏有什麼關係?你也有從E到B和從E到D的線 ​​- 他們應該告訴我們什麼? – Troubadour 2009-11-23 20:56:43

回答

0

貝塞爾曲線通過指定的第一個和最後一個控制點,內部控制點確定形狀。如果你使用ABCDE做曲線,它不會通過C點。但是你可以把它分成兩條不同的曲線,在C前後引入一個控制點,所以你有ABB'C和CC'D E.使B',C ,C'共線,使曲線具有一階連續性。

3

您需要使用Cubic Bezier。 Cubic Beziers由四個點定義,即,但不通過中間兩點,它們僅爲貝塞爾指定了一個向量。不幸的是,有一個無限數量的立方貝塞爾曲線,可以去'通過'你的四點。

唐蘭卡斯特寫了a document(pdf)關於這一點。對於他使用的算法,有一些非常有趣的細節。它在後記中,我懷疑你正在使用,但至少是校長在那裏。

Here is an article在CodeProject上,他們已經建立了一個庫,用於處理C#所要做的事情。

0

給出任意三個非共線點(A,B,D),可以繪製連接它們的弧。

鑑於任何三個或四個點,你可以構造一個連接它們的貝塞爾曲線,看起來相當不錯。 (你可能不需要爲了讓曲線看起來不錯而添加點C,但當然你可以。)

準確地說,如何做到這一點取決於你使用的圖形庫。那麼你在使用什麼庫?

+0

我實際上沒有使用任何庫。這是我在學校的高級項目。我必須手動繪製所有圖形。 – Michael 2009-11-24 00:06:20

+0

「手工」是指用鉛筆在紙上畫畫?也許你需要的是一組法國曲線和一個受電弓... – 2009-11-24 12:04:19

+0

「手動」意思是逐個像素。 :) – Michael 2009-11-24 16:11:19

0

上面所說的一切都是事實,但是我剛剛發現了一個小竅門.Bezier曲線不通過控制點,執行p0和pn(第一個和最後一個)。但是有一個公式可以讓你你可以通過計算新的「虛構」控制點來做到這一點。最後,我只有二次曲線的公式,但是我敢肯定它可以被推廣。這裏是: NEWPOINT(X)= P1(x)* 2-(P0(x)+ P2(x))/ 2 同樣適用於Y

該公式給出「新」P1點(導致p0和p2是開始和結束)通過「原創」P1.Hope,這有助於?還使用伯恩斯坦polynoms計算,這是我的意見