У меня есть космический корабль в 3D-среде. Я нарисовал кривую B-сплайна, используя контрольные точки (преобразованные в кривую Безье, чтобы иметь возможность рисовать). Каждый раз, когда вызывается событие рисования, судно находится в точке (0,0,0) и переводится на следующую координату на кривой. Теперь, прежде чем делать этот перевод, мне нужно будет сделать поворот так, чтобы ориентация корабля была направлена по касательной кривой в этой точке.Ориентация объекта траектории траектории
Я могу аппроксимировать касательную, найдя точку на кривой, которая находится рядом с текущей, сделав это. Я использую OpenGL в C++
float mDifference[1][3] = {nearPoint[0][0] - currentPosition[0][0],
nearPoint[0][1] - currentPosition[0][1],
nearPoint[0][2] - currentPosition[0][2]};
float norm = sqrt(mDifference[0][0] * mDifference[0][0]
+ mDifference[0][1] * mDifference[0][1]
+ mDifference[0][2] * mDifference[0][2]);
float tangent[1][3] = { mDifference[0][0]/norm,
mDifference[0][1]/norm,
mDifference[0][2]/norm};
//tangent = rotationVector?
spacecraftTransformGroup->setRotationVector(tangent[0][0],tangent[0][1],tangent[0][2]);
Я думаю, что вектор вращения является касательным, но не могу найти угол, необходимый для поворота корабля. Как я могу повернуть корабль, чтобы выровнять его с касательной?
Почему аппроксимировать касательную, если вы можете получить ее аналитически? Просто помните, что dy/dx = (dy/dt)/(dx/dt). – Sjoerd 2010-12-03 23:14:17
Просто потому, что я не знал, что математические функции для производных были в C++. Я мог бы изучить это, чтобы сделать его более точным. – Amaranth 2010-12-03 23:36:48