Open jbousquie opened 9 years ago
corriger sur les plans xOz et yOz... pas convaincu
en fait : ne pas traiter si =0 ou renvoyer résultat OU 1 par calcul resCos = (def_step == 0) ? 1 : cos (ou sin) (fac * def_step) faire stepX = res1 * res2
Merci à Laurent Wehrlé corrigé dans le plan xOy u = vect/ norm(vect) = (x, y) x' = x * cos ang - y * sin ang y' = x * sin ang + y * cos ang
reste à faire les deux autres plans
http://fr.wikipedia.org/wiki/Matrice_de_rotation#En_dimension_trois
il faut d'abord multiplier les matrices de rotation 3D : Rx * Ry * Rz avant d'appliquer le résultat au vecteur u
sauf erreur, en prenant comme angles de rotation ga sur Rx, be sur Ry et al sur Rz on obtient la matrice produit
cos(be) * cos(al) | -sin(al) * cos(be) | sin(be) sin(ga)_sin(be)_cos(al)+cos(ga)_sin(al) | -sin(ga)_sin(be)_sin(al)+cos(ga)_cos(al) | -sin(ga)_cos(be) -cos(ga)_sin(be)_cos(al)+sin(ga)_sin(al) | cos(ga)_sin(be)_sin(al)+sin(ga)_cos(al) | cos(ga)_cos(be)
donc si le vecteur initial est (x,y,z), le vecteur après rotation sera
x' = x * cos(be) * cos(al) - y * sin(al) * cos(be) + z * sin(be) y' = x * ( sin(ga )* sin(be) * cos(al)+cos(ga) * sin(al) ) + y * ( cos(ga) * cos(al) - sin(ga) * sin(be) * sin(al) ) - z * sin(al) * cos(be) z' = x * ( sin(ga) sin(al) - cos(ga) * sin(be) * cos(al) ) + y * ( cos(ga) * sin(be) * sin(al) + sin(ga) * cos(al) ) + z * cos(ga) \ cos(be)
ou plus simple : http://www.ruby-doc.org/stdlib-2.0/libdoc/matrix/rdoc/Matrix.html
préciser steps d'angles xOy, x0z et y0z mettre les cos/sin en conséquence sur les coords