Hé les gars, je suis en train de calculer les sommets d'un rectangle en rotation (2D).Calcul des sommets d'un rectangle pivotée
Il est assez facile si le rectangle n'a pas été tourné, je me suis partie dehors.
Si le rectangle a été tourné, je pensais que deux façons de calculer les sommets. 1) Déterminez comment transformer les sommets de l'espace local/objet/modèle (ceux que j'ai compris ci-dessous) en espace monde. Honnêtement, je n'ai aucune idée, et si c'est le meilleur moyen alors je sens que j'apprendrais beaucoup de lui si je pouvais le comprendre ...
2) Utilisez trig pour comprendre d'une manière ou d'une autre où les extrémités de la Le rectangle est relatif à la position du rectangle dans l'espace du monde. C'est ce que j'ai essayé de faire jusqu'à présent, je n'ai pas compris comment.
est ici la fonction qui calcule les sommets jusqu'ici, merci pour toute l'aide
void Rect::calculateVertices()
{
if(m_orientation == 0) // if no rotation
{
setVertices(
&Vertex((m_position.x - (m_width/2) * m_scaleX), (m_position.y + (m_height/2) * m_scaleY), m_position.z),
&Vertex((m_position.x + (m_width/2) * m_scaleX), (m_position.y + (m_height/2) * m_scaleY), m_position.z),
&Vertex((m_position.x + (m_width/2) * m_scaleX), (m_position.y - (m_height/2) * m_scaleY), m_position.z),
&Vertex((m_position.x - (m_width/2) * m_scaleX), (m_position.y - (m_height/2) * m_scaleY), m_position.z));
}
else
{
// if the rectangle has been rotated..
}
//GLfloat theta = RAD_TO_DEG(atan(((m_width/2) * m_scaleX)/((m_height/2) * m_scaleY)));
//LOG->writeLn(&theta);
}
+1 - J'ai tendance à préférer tourner le dos et ensuite faire un travail, rend la vie plus simple. –
De cette façon, vous pouvez vous en tirer en effectuant seulement 2 opérations trig (si vous stockez les résultats de 'cos (t)' et 'sin (t)' avant de calculer les sommets tournés). – jnylen
Comment cette formule pourrait-elle tourner dans le sens des aiguilles d'une montre? –