2009-05-28 69 views
8

我有一個由4點指定的貝塞爾曲線。我需要知道一個點是在貝塞爾曲線的左邊還是右邊。你能給我一個算法嗎?相對於貝塞爾曲線的點的位置

編輯:我敢肯定,我的方式產生貝塞爾曲線不會形成環路。

後來編輯我意識到我的最初的問題可以解決而不使用相對位置。當我發佈這個問題時,我認爲有一個相對位置的數學公式,類似地檢查一個點是否在圓的內部。看來這是不可能的。所以我會接受這個答案,這將提供一個有效的解決方案。

+1

你可能需要更具體一點關於你想要達到的目標......如果貝塞爾曲線形成一個循環,你期望什麼樣的答案? – jerryjvl 2009-05-28 12:59:39

+0

我想要移動Bezier曲線軌跡後的對象。如果他的當前位置位於曲線的左側,我將其方向改爲右側,反之亦然。 – 2009-05-28 13:15:57

+0

請注意,貝塞爾曲線絕對可以形成循環......如果您相對於端點跨越控制頂點,例如有四個頂點順序:(0,0),(100,100),(100,0),(0,100)應該做的伎倆。 – jerryjvl 2009-05-29 01:07:47

回答

5

您可以用一個非常簡單的算法(與k-subdivision相關的DeCastleju算法)確定貝塞爾曲線上的最近點。如果需要細節,請查看圖形寶石。

在這一點上,即使有循環,也可以通過確定從最近點開始測試點的矢量是否在沿着曲線的矢量的右側左側來確定側向(速度? - 不確定這裏的正確術語......)在你確定的最接近的點上。

您可以通過這兩個向量的叉積得到-that-。否定的或積極的將決定你的習慣和你在哪一方。

當然,在一個循環中,側向度將被定義爲如果您是一輛行駛中的汽車,當您走過時,您是否會看到右側或左側窗口?如果您是在整個貝塞爾曲線的右側或左側。所以這取決於你如何定義「側面」

對不起,如果我的條款關閉。它已經一段時間,因爲我有做任何事情貝塞爾的

它會更容易畫一幅畫;)

0

我不記得在這麼晚的時候數學,但你可能會想要使用曲線的細分算法來逐步細化它,直到片段「直」到足以讓它們可以作爲你決心的目的。

通過使用曲線細化的邊界多面體,可以更快地得出答案,以確定您的「點」在所有多面體之外的哪個點,然後立即變平直線段。

1

如果你只是想讓你的對象遵循曲線(就像你在評論中說的那樣),爲什麼不用參數方程移動你的對象呢? See this article

0

假設約束到曲線的點,必須定義的錨爲開端,另一個作爲端之一,然後計算屬於該曲線,是在中間(長度的一半)的點..那麼你可以說這個點是在開始和中間還是中間和結束之間。

這就是你想要的還是我完全失去了?