18 #include "precompiled.h"
26 1.f, -1.f, 0.f, 0.f );
33 startPos.
Y, endPos.
Y, startVel.
Y, endVel.
Y,
34 startPos.
Z, endPos.
Z, startVel.
Z, endVel.
Z,
35 0.0f, 0.0f, 0.0f, 1.0f );
40 CVector3D TimeVector(time*time*time, time*time, time);
87 Node[i].Velocity = Next - Previous;
88 Node[i].Velocity.Normalize();
103 float CurrentDistance = 0.f;
107 while (CurrentDistance +
Node[i].Distance < Distance
110 CurrentDistance +=
Node[i].Distance;
114 float t = Distance - CurrentDistance;
115 t /=
Node[i].Distance;
119 Node[i+1].Position, endVel, t);
125 if ( index >=
NodeCount - 1 || index < 0)
127 CVector3D temp = (
Node[index+1].Position -
Node[index].Position) * 3.0f * ( 1.0f /
Node[index].Distance) ;
128 return (temp -
Node[index+1].Velocity)*0.5f;
136 CVector3D temp = (
Node[index].Position -
Node[index-1].Position) * 3.0f * (1.0f /
Node[index-1].Distance);
137 return (temp -
Node[index-1].Velocity) * 0.5f;
154 newVel = newVel * ( 1 / (
Node[i-1].Distance +
Node[i].Distance) );
155 Node[i-1].Velocity = oldVel;
159 Node[NodeCount-2].Velocity = oldVel;
185 Node.push_back(temp);
204 Node.insert(
Node.begin() + index, temp);
218 Node[index-1].Distance = 0.0f;
219 Node.erase(
Node.begin() + index,
Node.begin() + index + 1 );
229 Node[index].Distance = time;
237 Node[index].Position = pos;
248 Node[i].Velocity *= 4.0f*r0*r1/((r0+r1)*(r0+r1));
CVector3D GetPosition(float time) const
void InsertNode(const int index, const CVector3D &pos, const CVector3D &rotation, float timePeriod)
void UpdateNodePos(const int index, const CVector3D &pos)
CVector3D Transform(const CVector3D &vector) const
CVector3D GetPositionOnCubic(const CVector3D &startPos, const CVector3D &startVel, const CVector3D &endPos, const CVector3D &endVel, float time)
void RemoveNode(const int index)
CVector3D GetStartVelocity(int index)
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
void UpdateNodeTime(const int index, float time)
CVector3D GetEndVelocity(int index)
CMatrix3D HermiteSpline(2.f,-3.f, 0.f, 1.f,-2.f, 3.f, 0.f, 0.f, 1.f,-2.f, 1.f, 0.f, 1.f,-1.f, 0.f, 0.f)
void AddNode(const CVector3D &pos, const CVector3D &rotation, float timePeriod)
void AddNode(const CVector3D &pos)
static float Length(const SVec3 v)