jbousquie / weathermap

lightweight Ruby and HTML5 network weathermap
http://logiciels.iut-rodez.fr/proto/weathermap/
3 stars 1 forks source link

steps d'angle #30

Open jbousquie opened 9 years ago

jbousquie commented 9 years ago

préciser steps d'angles xOy, x0z et y0z mettre les cos/sin en conséquence sur les coords

jbousquie commented 9 years ago

corriger sur les plans xOz et yOz... pas convaincu

jbousquie commented 9 years ago

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

jbousquie commented 9 years ago

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

jbousquie commented 9 years ago

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

jbousquie commented 9 years ago

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)

jbousquie commented 9 years ago

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)

jbousquie commented 9 years ago

ou plus simple : http://www.ruby-doc.org/stdlib-2.0/libdoc/matrix/rdoc/Matrix.html