2011-11-21 10 views
9

İlk ve son noktaların verildiği bir küp süslemeli eğime sahibim (yani P0 (0,0) ve P3 (1,1)). Diğer iki nokta şu şekilde tanımlanır: kübik bez (0.25, 0.1, 0.25, 1.0) (X1, Y1, X2, Y2, ayrıca bu değerler sırasıyla 0 veya 1'den küçük veya büyük olmamalıdır)
Sadece bir tane varsayarak, belirli bir X için Y koordinatını almak için ne yapmam gerekir? (Belli koşullar altında birden fazla değer olabileceğini biliyorum, ama bir kenara koyalım. Burada roket bilimi yapmıyorum, sadece geçiş yapmak için Y'ye birden çok kez sahip olmak istiyorum)Kübik bezier eğrileri - verilen Y için X olsun

Bunu kazmayı başardım: y coordinate for a given x cubic bezier, ama xTarget'in ne anlama geldiğini anlamıyorum.
Oh, ayrıca bu ev ödevi de değil, sadece internette kübik bezier eğrileri hakkında anlaşılır bir şey olmaması gerçeğinden biraz rahatsızım. Bir x değer verildiyse

+0

Soru da burada görünür: http://stackoverflow.com/questions/7348009/y-coordinate-for-a-given-x-cubic-bezier İlk hangisi olduğundan emin değil, ancak ek bilgi içerebilir. – mredig

cevap

16

Eğer [0,1] herhangi t için

P0 = (X0,Y0) 
P1 = (X1,Y1) 
P2 = (X2,Y2) 
P3 = (X3,Y3) 

Sonra varsa koordinatlar

X(t) = (1-t)^3 * X0 + 3*(1-t)^2 * t * X1 + 3*(1-t) * t^2 * X2 + t^3 * X3 
Y(t) = (1-t)^3 * Y0 + 3*(1-t)^2 * t * Y1 + 3*(1-t) * t^2 * Y2 + t^3 * Y3 

tarafından verilen eğri üzerinde bir nokta olsun, o zaman gerek [0,1]'daki hangi t değerlerinin eğride o noktaya karşılık geldiğini bulup, y koordinatını bulmak için bu t değerlerini kullanın. X(t) denklemde

üstünde bulunan x değere sol tarafını ayarlamak ve X0, X1, X2, X3 takın. Bu size t değişkenli bir kübik polinom ile ayrılır. Bunu t için çözersiniz, daha sonra y koordinatını almak için odeğerini Y(t) denklemine takın.

cubic polynomial'u çözmek zor ancak kübik bir polinomu çözmek için yöntemlerden birini kullanarak dikkatli bir şekilde yapılabilir.

+0

Bazı arkadaşlardan biraz yardım alarak bunu anlayabiliyordum. İhtiyacım olanı gerçekleştirmek için başka bir forumda edindiğim iki işlevi yeniden yazdım: http://cl.ly/C1Nl (C#, ayrıca güzel olmayabilir) Yardımlarınız için teşekkürler! :) –

+0

Bu formülde t nedir? –

+0

@JhansiKiRani t, 0 ve 1 arasında olduğu sürece olmasını istediğiniz her şeydir. –