Senast redigerat
Visa signatur
Jag vet inte riktigt vad ni försöker lära mig, men jag ska be att få vara av en fullständigt avvikande mening.
Hej!
Jag sitter här och försöker härma en OrientationInterpolator (i VRML, men så vitt jag har förstått så använder de flesta 3D-språk samma typ av interpolering vid rotationer?), men det vill sig inte riktigt.
Låt säga att jag har
key [ 0 1.0000]
keyValue [0 0 1 1.57, 1 0 0 1.57]
men vill lägga in ett extra stopp på vägen, mellan dessa, som inte förändrar rörelsen någonting. Vilka värden ska jag använda? Jag har försökt med kvaternioner, men det blir fortfarande ett litet hack när objektet rör sig till/från mellansteget. (Använder en slerp-funktion (http://www.mathworks.com/matlabcentral/files/11827/slerp.m) för att generera mellansteget.).
Någon som vet hur interpolatorn fungerar mer exakt, eller som har en idé om vad som kan vara fel?
(Jag ska skapa en tabell med alla koordinater för rörelsen istället för att använda interpolatorn, men jag har bara ursprungsrörelsen just som key och keyValues, så en omvandling krävs.)
---
Lösningen:
keyValues representerar en axel och vinkel, och för att hitta mellanliggande orienteringar användes kvaternioner.
1. Konvertera axis/angle till kvaternion:
q(1) = s(1) * sin(s(4)/2);
q(2) = s(2) * sin(s(4)/2);
q(3) = s(3) * sin(s(4)/2);
q(4) = cos(s(4)/2);
där q = [x y z w] är din kvaternion och s är axis/angle från keyValues-matrisen.
Konvertera två på varandra följande keyValues-rader. (s1->q1, s2->q2)
2. Använd slerp (t ex genom en redan befintlig funktion som finns på matlabs hemsida). Den beräknar en kvaternion q(t) som ligger mellan q1 och q2, med t = [0,1] och
q(t=0) = q1
q(t=1) = q2
Beroende på hur många stegs som behövs; räkna ut q för några olika t.
3. Konvertera tillbaka till axis/angle:
scale = sqrt(q(1)^2 + q(2)^2 + q(3)^2);
p(1) = q(1)/scale;
p(2) = q(2)/scale;
p(3) = q(3)/scale;
p(4) = 2 * acos(q(4));
p är nu nya axis/angle-representationer.
/josefin
Jag vet inte riktigt vad ni försöker lära mig, men jag ska be att få vara av en fullständigt avvikande mening.
Spelnyheter från FZ
Copyright © 1999–2025 Geeks AB. Allt innehåll tillhör Geeks AB.
Citering är tillåten om källan anges.