2010-08-13 7 views
4

J'ai un point, disons p (0.0, 0.0, 20.0) que je veux faire pivoter autour du point a (0.0, 0.0, 10.0) dans le plan XZ. Quelle est la manière la plus simple de le faire? J'utilise Qt avec QVector3D et QMatrix4x4 pour effectuer des transformations. Tout ce que je peux penser à quelque chose comme ça:Rotation autour d'un point donné

QVector3D p(0.0, 0.0, 20.0); 
QVector3D a(0.0, 0.0, 10.0); 
QMatrix4x4 m; 

m.translate(-a.x(), -a.y(), -a.z()); 
p = m*p; 

m.setToIdentity(); 
m.rotate(180, 0.0, 1.0, 0.0); 
p = m*p; 

m.setToIdentity(); 
m.translate(a.x(), a.y(), a.z()); 
p = m*p; 

Mais il semble conspiciously complexe pour moi et je me demande s'il y a des solutions plus simples ou plus élégantes?

Répondre

6

Vous pouvez simplifier le code en utilisant une simple soustraction vecteur/ajout au lieu de la multiplication avec une matrice de traduction:

QVector3D p(0.0, 0.0, 20.0); 
QVector3D a(0.0, 0.0, 10.0); 
QMatrix4x4 m; 

p-=a; 
m.rotate(180, 0.0, 1.0, 0.0); 
p*=m; 
p+=a; 
+0

ne fonctionne pas pour moi. Je reçois cette erreur: 'pas de surcharge viable '* ='' – adius

+0

@adius: 'p = m * p' devrait fonctionner. –

Questions connexes