2010-07-05 181 views
0

我在flex中工作,但我認爲這是一個與語言無關的問題。我試圖用3點繪製曲線,使用curveTo(一個二次貝塞爾函數,我不相信Flex有任何其他的,如果有的話,請糾正我!)點1和3是「節點」,點2是一個拖動手柄。尋找貝塞爾曲線的頂點

我想要的不是曲線朝向第2點但實際上通過它。我設法通過填補它 - 通過加倍(點1和3之間的線的中點之間的距離)和點2來實現這個工作。

雖然這並沒有把它放在行的頂點上,只是在接近它的地方。

任何任何想法?

安德魯

+1

根據定義,貝塞爾樣條曲線不會通過它們的控制點(除非我猜測退化情況)。有一些立方樣條,*設計,包括控制點(Catmull-Rom),但我對Flex一無所知,所以我不能說這些是否以任何方式支持。他們一點都不難實施;我真的很愚蠢,過去我已經設法編寫了幾次。 – Pointy 2010-07-05 16:48:07

+0

聽起來好像你真的想爲拖動手柄選擇一個位置,使曲線通過你選擇的點。是?你的觀點是否以某種方式任意或受到限制 - 即第2點實際上是在1到3線的平分線上? – phkahler 2011-08-12 14:43:32

回答

0

的二次Bezier曲線是計算使用下式

B(t) = (1-t)(1-t)*P0 + 2(1-t)t*P1 + t*t*P2 

其中P0,P1和P2是指定的3個點。曲線從P0開始並結束於P2 t的範圍從0到1 在t = 0.5時達到頂點 所以嘗試在公式中設置P0,P2和t = 0.5將其設置爲等於您的點 您想要頂點,並從公式中提取P1

+0

謝謝你,我已經看過這個公式。問題在於頂點不總是在t = 0.5的問題。 – Andrew 2010-07-07 10:49:44

0

貝塞爾樣條不會通過它的控制點,而是一個Catmull Rom樣條曲線。

B(t) = ((2*P1)+(-P0+P2)*t + (2*P0-5*P1+4*P2-P3)*t*t + (-P0+3*P1-3*P2+P3)*t*t*t))/2

雖然這是一個立方體,而不是二次樣條。你可以嘗試做P1=P2

0

我們這個公式:B'(t) = 3 (1 - t) 2 (P1 - P0) + 6 (1 - t) t (P2 - P1) + 3 t2 (P3 - P2)

可以使用衍生找到最大值和最小值。