J'ai un vaisseau spatial dans un environnement 3D. J'ai dessiné une courbe B-Spline en utilisant des points de contrôle (convertis en une courbe de Bézier pour pouvoir la dessiner). Chaque fois que l'événement de tirage est appelé, le navire se trouve au point (0,0,0) et est traduit à la coordonnée suivante sur la courbe. Maintenant, avant de faire cette traduction, je devrais faire une rotation de sorte que l'orientation du vaisseau soit le long de la tangente de la courbe à ce point.Courbe Trajectoire orientation objet
Je suis en mesure de rapprocher la tangente en trouvant un point sur la courbe qui est près de l'actuel en faisant cela. J'utilise OpenGL en 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]);
Je pense que le vecteur de rotation est la tangente, mais ne peut pas trouver l'angle nécessaire pour faire tourner le navire. Comment puis-je faire pivoter le vaisseau pour l'aligner avec la tangente?
Rappelez-vous juste que dy/dx = (dy/dt)/(dx/dt). – Sjoerd
Tout simplement parce que je ne savais pas ce que les fonctions mathématiques pour les dérivés étaient en C++. Je pourrais examiner cela pour le rendre plus précis. – Amaranth