Gegeven:
- Punt 1 (X,Y,Z)
- Quaternion (A,B,C,D)
- Afstand r
Ik weet ook dat een Quaternion in dit geval wat te veel informatie bevat, maar dit zijn nu de gegevens die ik heb en niets meer/anders.
Alvast bedankt
Je moet inderdaad de vectoren ook in een quaternion stoppen om ermee te kunnen rekenen. Als je een vector (x,y,z) hebt, dan moet je die als (0,x,y,z) in de berekening stoppen.stekkedecat schreef: ↑ma 21 jan 2013, 11:06
dit is ongeveer wat ik wilde bereiken... echter uit die vermenigvuldiging gaat een vector4 uit komen...
Nee. Die q is het quaternion dat de rotatie bepaalt. Het hele idee is net dat je niet via de rotatiematrix gaat maar alles met quaternion vermenigvuldiging blijft doen.stekkedecat schreef: ↑ma 21 jan 2013, 11:06
ik ga er ook van uit dat q en q-1 vierkante matrices zijn volgens de vorm uit de figuur waardoor ik blijkbaar q*(0,0,1)*q-1moet doen...
Code: Selecteer alles
Code to transform a point:
double w; // real part of quaternion
double x; // imaginary i part of quaternion
double y; // imaginary j part of quaternion
double z; // imaginary k part of quaternion
sfvec3d transform(sfvec3d p1){
sfvec3d p2 = new sfvec3f();
p2.x = w*w*p1.x + 2*y*w*p1.z - 2*z*w*p1.y + x*x*p1.x + 2*y*x*p1.y + 2*z*x*p1.z - z*z*p1.x - y*y*p1.x;
p2.y = 2*x*y*p1.x + y*y*p1.y + 2*z*y*p1.z + 2*w*z*p1.x - z*z*p1.y + w*w*p1.y - 2*x*w*p1.z - x*x*p1.y;
p2.z = 2*x*z*p1.x + 2*y*z*p1.y + z*z*p1.z - 2*w*y*p1.x - y*y*p1.z + 2*w*x*p1.y - x*x*p1.z + w*w*p1.z;
return p2;
}