J'essaie de faire tourner des vecteurs en utilisant des matrices, mais je me suis trompé.Comment faire pivoter des vecteurs en utilisant des matrices dans Processing?
Je pensais que tout ce que je devais faire était de créer une matrice de rotation et de la multiplier en un vecteur pour obtenir le vecteur pivoté.
Here vous pouvez voir un test simple que je l'ai fait à l'aide Processing:
Utilisez un pour incrémenter rotation et x/y/z aux changements de l'axe.
Et voici source:
PVector[] clone,face = {new PVector(50,0,50),new PVector(-50,0,50),new PVector(-50, 0, -50),new PVector(50, 0, -50)};
color faceC = color(255,0,0),cloneC = color(0,255,0);
float angle = 90;
PVector x = new PVector(1,0,0),y = new PVector(0,1,0),z = new PVector(0,0,1), axis = x;
PFont ocr;
void setup(){
size(400,400,P3D);
strokeWeight(1.1610855);smooth();
clone = rotateVerts(face,angle,axis);
ocr = loadFont("ocr.vlw");
}
void draw(){
background(255);
fill(0);textFont(ocr,10);text("a = increment rotation\nx/y/z = change axis\nrotation: " + angle + "\naxis: " + axis,10,10,200,200);fill(255);
translate(width*.5,height*.5);
rotateX(map(mouseY,height*.5,-height*.5,0,TWO_PI));
rotateY(map(mouseX,0,width,0,TWO_PI));
drawQuad(face,faceC);
drawQuad(clone,cloneC);
stroke(128,0,0);line(0,0,0,100,0,0);stroke(0,128,0);line(0,0,0,0,-100,0);stroke(0,0,128);line(0,0,0,0,0,100);
}
void keyPressed(){
if(key == 'a') angle += 15;
if(angle > 360) angle -= 360;
if(key == 'x') axis = x;
if(key == 'y') axis = y;
if(key == 'z') axis = z;
clone = rotateVerts(face,angle,axis);
}
PVector[] rotateVerts(PVector[] verts,float angle,PVector axis){
int vl = verts.length;
PVector[] clone = new PVector[vl];
for(int i = 0; i<vl;i++) clone[i] = PVector.add(verts[i],new PVector());
//rotate using a matrix
PMatrix3D rMat = new PMatrix3D();
rMat.rotate(radians(angle),axis.x,axis.y,axis.z);
for(int i = 0; i<vl;i++) rMat.mult(clone[i],clone[i]);
return clone;
}
void drawQuad(PVector[] verts,color c){
stroke(c);
beginShape(QUADS);
for(int i = 0 ; i < 4; i++) vertex(verts[i].x,verts[i].y,verts[i].z);
endShape();
}
traitement est livré avec un PVector et PMatrix3D que je l'ai utilisé. Est-ce que je n'utilise pas PMatrix, il devrait être utilisé ou est-ce un bug? Des indices?
C'est tout! woo hoo! Merci! –