2011-06-06 21 views
10

Bir nesneyi manipüle etmeye çalışıyorum. Başka bir nesneye yaklaştığında, bir dünya diyelim ki, kürenin orjinal nesneyle yerçekimsel bir çekime sahip olmasını istiyorum. CCBezierTo'u kullanmam gerektiğini biliyorum, bu bir matematik sorusu olduğu için programlama sorusu değil.Cocos2D Bezier eğrisi, nesnenin etrafındaki yerçekimi

Matematiksel olarak, bezier eğrisinin üç noktasını (1, 2 ve son) nasıl bulabilirim ve mesafesine bağlı olarak bir ağırlık veririm (daha da uzağa = daha az çekme). Bir değişkende haritalanmış olan uzaklığa zaten sahibim.

Ayın etrafında sapan bir uzay gemisi düşünün.

Kodu:

ccBezierConfig bezier; 
bezier.controlPoint_1 = ccp(projectile.position.x + 10, projectile.position.y + 20); 
bezier.controlPoint_2 = ccp(projectile.position.x + 20, projectile.position.y + 40); 
bezier.endPosition = ccp(projectile.position.x + 30, projectile.position.y+60); 
id bezierAction = [CCBezierTo actionWithDuration:1 bezier:bezier]; 
[projectile stopAllActions]; 
[projectile runAction: bezierAction]; 
+1

Niçin bir mermi nesnesine mesafenin karesiyle orantılı bir kuvvet vektörü uygulamıyorsunuz? yani neden sadece "yer çekimi" değil? Merminin doğrudan nesnenin merkezine doğru yönelmediği varsayılarak, yol doğal olarak kavisli olacaktır. – Robinson

+0

http://oreilly.com/catalog/9780596000066 –

cevap

1

yörünge bir konik bölüm (çizgi, hiperbol, parabol, elips veya daire) olur.

Bunları rasyonel Bezier eğrisi olarak gösterebilirsiniz. http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/NURBS/RB-conics.html ve http://www.cs.unc.edu/~dm/UNC/COMP236/papers/farin.pdf.

Eğer ikinci dereceden Bezier bölümleri kullanmakta ısrar ederse, ben kontrol noktaları en küçük kareler ile minimizasyonu optimal pozisyonları bulmak için bu http://www.netlib.org/minpack/lmder.f gibi bir işlevi kullanmak.

Sadece konik bölümleri hesaplar ve bunları çizgi döngüler olarak çizerseniz en kolay olacağını düşünüyorum. Veya bir verlet entegratörü uygular ve hareket denklemlerini çözersiniz.