Вы хотите реализовать векторную математику X_{i+1} = X_{i} + Vt
. Для векторов X
s и V
, представляющих положение и скорость, соответственно, и t
, представляющих время. Я параметризировал расстояние вдоль трассы по времени, потому что я физик, но это действительно естественно. Нормализуйте вектор скорости, если вы хотите задать расстояние трека (то есть масштаб V
такой, что V.x*V.x + V.y*V.y + V.z*V.z = 1
).
Использование struct
выше делает естественным доступ к элементам, но не так удобно делать сложение: для этого лучше использовать массивы. Как это:
double X[3];
double V[3];
// initialize
for (int i=0; i<3 ++1){
X[i] = X[i] + V[i]*t;
}
С объединением вы можете получить преимущества обоих:
struct vector_s{
double x;
double y;
double z;
}
typedef
union vector_u {
struct vector_s s; // s for struct
double a[3]; // a for array
} vector;
Если вы хотите связать положение и скорость частицы с частицей (очень разумная вещь), вы создаете структуру, которая поддерживает два вектора
typedef
struct particle_s {
vector position;
vector velocity;
//...
} particle_t;
и запустите процедуру обновления, которая выглядит примерно так:
void update(particle *p, double dt){
for (int i=0; i<3 ++i){
p->position.a[i] += p->velocity.a[i]*dt;
}
}