Dan doe je nu de rotatiematrices:
Rotatie om X-as:
Code: Selecteer alles
[ 1, 0, 0, 0]
[ 0, cos(xrot), -sin(xrot), 0]
[ 0, sin(xrot), cos(xrot), 0]
[ 0, 0, 0, 1]
Rotatie om Y-as
Code: Selecteer alles
[ cos(yrot), 0, sin(yrot), 0]
[ 0, 1, 0, 0]
[-sin(yrot), 0, cos(yrot), 0]
[ 0, 0, 0, 1]
Rotatie om Z-as.
Code: Selecteer alles
[ cos(zrot), -sin(zrot), 0, 0]
[ sin(zrot), cos(zrot), 0, 0]
[ 0, 0, 1, 0]
[ 0, 0, 0, 1]
(overigens even schaamteloos gekopieerd van
hier want die had ik niet zo in m'n hoofd zitten)
Als het kwartje echt gevallen is dan zie je in 1 oogopslag dat het roteer-om-X verhaaltje roteert in het YZ vlak.
Roteer je een punt [1,0,0] 90 graden om de Z-as, dan komt daar [0,1,0] uit (teken maar eens).
Daarna moet je maar eens 2 operaties cascaderen door matrices te vermenigvuldigen. Bijvoorbeeld uitgaan van [1,0,0] als input, een rotatie matrix aanmaken die 90 graden roteert om de Z, vermenigvuldigen met een translatiematrix die 50 opschuift, en de vector met de uiteindelijke matrix vermenigvuldigen.
Dus
Origineel = [1,0,0,1]
RotMatrix = MaakRotZMatrix(90)
TranMatrix = MaakTranMatrix(0,49,0)
TransformMatrix = MatMul4x4(TransMatrix, RotMatrix)
Getransformeerd = VecMatMul(Origineel, TransformMatrix)
Maak dat maar eens, inclusief die functies want die ga je vaak genoeg aanroepen...
Oja, kwa getallen erin stoppen: niett zomaar iets erin proppen maar iets pakken waarvan je kunt beredeneren wat eruit moet komen. Anders weet je ook niet of het werkt, toch?
Wil je trouwens kijken of je nummertjes kloppen die in de matrix staan: in CamBam kun je ook een transformatiematrix invullen. In jouw code 33,6792 graden roteren om de Y-as moet overeen komen met wat CamBam zegt als je dat doet.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'