Bonjour à tous, je suis nouveau dans ce forum et j'ai deja un probleme...
En fait j'essaye de réaliser un algorythme de resolution de rubik's cubes, mais je n'arrive pas à bien orienter chacun de mes cubes...
En effet, lorsque par exemple je met
rotateX(radians(90));
Le repere change et l'axe Z devient l'axe Y... Ce qui veut dire que je ne peux plus faire
rotateY(radians(90));
Pour faire une rotation de 90 degrés sur l'axe Y de départ.
Peut avez vous des astuces a me donner pour contourner ce probleme?
Merci d'avance et a bientot
Hors ligne
Je ne suis pas sûr d'avoir bien compris ton problème, mais il ne faut pas oublier que les transformations rotate(), translate(), scale() sont cumulatives.
translate(50, 0); rect(0, 0, 10, 10); translate(20, 0); rect(0, 0, 10, 10);
placera le deuxième rectangle à 70 sur l'axe des x.
Pour contrôler cela tu as des fonctions :
pushMatrix() et popMatrix()
http://processing.org/reference/pushMatrix_.html
Hors ligne
Salut, merci pour ta réponse! En fait, ce qui me gène c'est justement que les transformations soient cumulative, un bout de mon code pour mieux comprendre :
pushMatrix(); translate((posX*53)-25,(posY*53)-25,-((posZ*53)-25)); // on place le cube a la bonne place rotateX(radians(angleX)); // on l'oriente, et c'est la que ca coince rotateY(radians(angleY)); rotateZ(radians(angleZ)); fill(0); // et la on dessine un petit cube du rubik's cube box(50); fill(face1); translate(0,25,0); box(45,1,45); // ainsi que sa premiere face fill(face2); translate(0,-25,25); box(45,45,1); // et sa deuxieme popMatrix();
C'est au niveau des trois rotate que ça bloque, car en fait après avoir fait une rotation sur l'axe X, le repère se trouve changé et ça a bougé l'axe Y et l'axe Z, ce qui veut dire que les deux autres rotations ne se font plus par rapport au repère d'origine mais par rapport au nouveau repère.
J'espere que tu as compris
Hors ligne
Pourquoi ne fais-tu pas :
rotate(radians(angleX), radians(angleY), radians(angleZ));
Hors ligne
Merci a vous deux, j'ai enfin trouver, en fait la fonction rotate s'utilise avec l'angle que le vont faire et les trois autres parametres sont l'axe, ce qui donne par exemple :
rotate(radians(angleX),1,0,0);
pour tourner sur un l'axe des X. Tout marche.
Mais comme ca serait trop beau, il y a un probleme : lorsque je tourne les differentes faces du cube individuellement, le cube marche bien, les faces s'orientent et tout, mais des que je combine plusieurs rotation, comme par exemple une rotation de la face droite et une rotation de la face haute, tout s'emele, les cubes ne so'rientent plus... Pourquoi?? Je met le code en piece jointe. (necessite peasy cam).
EDIT : en fait je crois que les cubes s’emmêle car le problème de rotation n'est toujours pas réglé... Quand on accumule des rotations a faire sur deux ou trois axes, ca deconne...
Dernière modification par nono9212 (2014-03-19 17:33:53)
Hors ligne