我怎样才能在空气中重现箭头的运动?

给定两个粒子A和B形成箭头本身,AP一个边缘和相反的一个BP像这样AP ——— BP

const float DistArrow = 60; 

我在哪里有结构粒子:

 struct Particle { struct Complex P; //Position struct Complex F; //Gravitational Force struct Complex V; //Velocity float m; //Mass } 

在开始每个粒子时,A和B的起始速度为(40,70)。 我给AF(0,-9.21)和BF(0,-9.81)增加一个力值。 所以说BF高了很多,所以把A拖下去了。

我想让箭头像这样移动:

箭头的移动

而我试图弄清楚如何制作,直到我被困在这(我正在尝试以最初DistArrow箭头的方式校准:

我正在校准箭头

 A = erA->B*(D(AB)-DistArrow)/2+A; where erA->B(unit vector) = (BA)D(AB); B = erB->A*(D(AB)-DistArrow)/2+A; where erB->A(unit vector) = (AB)D(AB); 

问题是,它只是旋转180度,不知道为什么它,如果它将无限下降,它应该是在B的顶部,垂直于oX的一条线。

我正在寻求一个不涉及太多物理的好解决scheme,任何建议将不胜感激。

你需要一点物理学和一点微积分。

让我们把P作为箭头的点,L作为箭头的长度,Q作为箭头的尾部。

你以初始速度V和发射角度A发射箭头,并且具有-9.81的重力G.

 Vx = cos(A)*V Vy = sin(A)*V 

我是在箭头发射的那一刻P的intitial x和y位置。

t代表自启动箭头以秒为单位的时间。

 function(t) { Px = t*Vx+Ix Py = G*t^2+Vy*t+Iy Sa = atan((2*G*t+Vy)/Vx)+pi Qx = Px+cos(Sa)*L Qy = Py+sin(Sa)*L }