3.5.6 · D3 · Physics › Guidance, Navigation & Control (GNC) › Quaternions — definition q = (q₀, q₁, q₂, q₃), unit quaterni
Intuition Yeh page kya hai
Parent note ne tumhe bataya tha ki quaternion kya hota hai aur kyun unit constraint = 1 hoti hai. Yahan hum ulta karte hain: hum formula q = ( cos 2 θ , n ^ sin 2 θ ) aur uske saathiyon (product ⊗ , conjugate, sandwich rotation) par har tarah ka input throw karte hain aur har ek ko ek aisa number tak grind karte hain jo tum haath se check kar sako. Yahan kuch bhi abstract nahi hai — har example ek Verify line par khatam hota hai.
Shuru karne se pehle, ek reminder un tools ka jo hum use karte hain (sab parent mein build kiye gaye hain — hum koi bhi aisa symbol use nahi karte jo humne earn nahi kiya):
Recall Woh teen tools jo hum baar baar use karte hain
Encoding: q = ( cos 2 θ , n ^ sin 2 θ ) — unit axis n ^ ke baare mein angle θ .
Product: p ⊗ q = ( p 0 q 0 − p ⋅ q , p 0 q + q 0 p + p × q ) .
Vector v ka Sandwich rotation: v ko ek pure quaternion v = ( 0 , v ) ki tarah treat karo, phir v ′ = q ⊗ v ⊗ q − 1 , aur unit q ke liye, q − 1 = q ∗ = ( q 0 , − q v ) .
Is topic mein jo bhi situation aa sakti hai woh in cells mein se kisi ek mein aati hai. Neeche har worked example us cell ke saath tagged hai jise woh khatam karta hai.
Cell
Scenario class
Kahan trip ho sakte ho
A
Zero / degenerate: θ = 0
axis undefined hai, phir bhi identity deni hai
B
Positive angle, clean axis (Q-I style)
half-angle, norm check
C
Negative angle / opposite spin
kaun sa sign flip hota hai, q vs q − 1
D
Limiting value: θ = 18 0 ∘
cos 9 0 ∘ = 0 , scalar part vanish ho jaata hai
E
Non-commutativity: p ⊗ q vs q ⊗ p
p × q term
F
Double cover: q vs − q
same rotation, alag tuple
G
Actually ek vector rotate karna (sandwich)
kya arrow sach mein move karta hai?
H
Drift & renormalize (numerical)
S 3 par project back karo
I
Real-world word problem (spacecraft)
words ko axis + angle mein translate karo
J
Exam twist: diye gaye q se θ , n ^ recover karna
cos/sin ko invert karna, arccos, unit axis
θ = 0 (identity)
"Rotate by 0 ∘ about kisi bhi axis n ^ " ko encode karo.
Forecast: aage padhne se pehle chaar numbers guess karo. (Hint: kuch nahi karna chahiye 1 se multiply karne jaisa behave karna.)
Half-angle: θ /2 = 0 .
Yeh step kyun? Har quaternion formula θ /2 use karta hai, kabhi θ nahi (double-sided product). Isliye hum hamesha pehle half karte hain.
Scalar part: cos 0 = 1 .
Vector part: n ^ sin 0 = n ^ ⋅ 0 = ( 0 , 0 , 0 ) .
Yeh step kyun? sin 0 = 0 axis ko poori tarah kill kar deta hai — isliye ek zero rotation ko koi farak nahi padta ki tum kaun sa axis choose karte ho. Yeh degeneracy harmless hai.
Toh q = ( 1 , 0 , 0 , 0 ) .
Verify: norm2 = 1 2 + 0 + 0 + 0 = 1 ✔. Aur q ⊗ q = ( 1 ⋅ 1 − 0 ⋅ 0 , … ) = ( 1 , 0 ) , toh yeh 1 ki tarah act karta hai. ✔
z -axis ke baare mein 9 0 ∘
Axis n ^ = ( 0 , 0 , 1 ) , angle θ = 9 0 ∘ .
Forecast: chaar slots mein se kaun se non-zero honge, aur kya woh 2 2 honge ya 2 1 ?
Half-angle: θ /2 = 4 5 ∘ .
Scalar: cos 4 5 ∘ = 2 2 ≈ 0.7071 .
Vector: n ^ sin 4 5 ∘ = ( 0 , 0 , 1 ) ⋅ 2 2 = ( 0 , 0 , 2 2 ) .
Yeh step kyun? Sirf z -slot (q 3 ) ko sine milta hai kyunki axis purely z ki taraf point karti hai; q 1 , q 2 zero rehte hain.
q = ( 2 2 , 0 , 0 , 2 2 ) .
Verify: ( 2 2 ) 2 + ( 2 2 ) 2 = 2 1 + 2 1 = 1 ✔.
Figure dekho: teal axis z hai, aur quaternion angle 4 5 ∘ (actual 9 0 ∘ ka half, plum mein) ko scalar slot mein park karta hai. Poora 9 0 ∘ physical turn (burnt orange arc) woh hai jo sandwich actually ek vector par produce karega — woh hum Cell G mein karte hain.
z ke baare mein − 9 0 ∘ , aur yeh + 9 0 ∘ se kaise related hai
Same axis n ^ = ( 0 , 0 , 1 ) lekin θ = − 9 0 ∘ .
Forecast: Cell B ke comparison mein kaun sa slot sign change karega?
Half-angle: − 4 5 ∘ .
Scalar: cos ( − 4 5 ∘ ) = cos 4 5 ∘ = 2 2 (cosine even hai — unchanged).
Yeh step kyun? Spin reverse karne se scalar flip nahi hoti; isliye q 0 tumhe turn ki amount batata hai, uski direction nahi.
Vector: n ^ sin ( − 4 5 ∘ ) = ( 0 , 0 , − 2 2 ) (sine odd hai — sign flip hoti hai).
q − = ( 2 2 , 0 , 0 , − 2 2 ) .
Verify — kya yeh Cell B ka inverse hai? Unit inverse conjugate hota hai: q B ∗ = ( 2 2 , 0 , 0 , − 2 2 ) = q − ✔. Toh − θ se rotate karna = conjugate karna — exactly wahi jo "rotation undo karna" ka matlab hona chahiye. Aur q B ⊗ q − identity hona chahiye: scalar part = 2 1 − ( 0 , 0 , 2 2 ) ⋅ ( 0 , 0 , − 2 2 ) = 2 1 + 2 1 = 1 , vector part = 0 ✔.
x ke baare mein half-turn
Axis n ^ = ( 1 , 0 , 0 ) , θ = 18 0 ∘ .
Forecast: jab turn poora half-circle ho toh scalar part ka kya hoga?
Half-angle: 9 0 ∘ .
Scalar: cos 9 0 ∘ = 0 .
Yeh step kyun? Yeh limiting behaviour hai — scalar part completely vanish ho jaata hai, ek pure quaternion rehta hai. Half-turns hi akele aise rotations hain jisme q 0 = 0 hota hai.
Vector: n ^ sin 9 0 ∘ = ( 1 , 0 , 0 ) ⋅ 1 = ( 1 , 0 , 0 ) .
q = ( 0 , 1 , 0 , 0 ) .
Verify: norm2 = 0 + 1 + 0 + 0 = 1 ✔. Sanity: q ⊗ q ek 36 0 ∘ turn hona chahiye = − identity (double cover!). q ⊗ q ka scalar = 0 ⋅ 0 − ( 1 , 0 , 0 ) ⋅ ( 1 , 0 , 0 ) = − 1 , vector = 0 , toh q ⊗ q = ( − 1 , 0 ) = − q id ✔ — woh famous result "do half-turns + 1 nahi, − 1 dete hain."
p ⊗ q = q ⊗ p
Maano p = ( 0 , 1 , 0 , 0 ) (Cell-D style, x ke baare mein 18 0 ∘ ) aur q = ( 0 , 0 , 1 , 0 ) (y ke baare mein 18 0 ∘ ).
Forecast: kya scalar parts match honge lekin vectors differ karenge? Ya kuch aur?
p ⊗ q compute karo. Scalars: p 0 q 0 = 0 ; p ⋅ q = ( 1 , 0 , 0 ) ⋅ ( 0 , 1 , 0 ) = 0 . Scalar part = 0 .
Vector part = p 0 q + q 0 p + p × q = 0 + 0 + ( 1 , 0 , 0 ) × ( 0 , 1 , 0 ) = ( 0 , 0 , 1 ) .
Yeh step kyun? Jab dono scalars zero hon, toh sirf cross product bachta hai — yeh woh term hai jo "order matters" ki information carry karta hai.
Toh p ⊗ q = ( 0 , 0 , 0 , 1 ) .
Ab swap karo: q ⊗ p vector part = ( 0 , 1 , 0 ) × ( 1 , 0 , 0 ) = ( 0 , 0 , − 1 ) , giving q ⊗ p = ( 0 , 0 , 0 , − 1 ) .
Verify: p ⊗ q = ( 0 , 0 , 0 , 1 ) = ( 0 , 0 , 0 , − 1 ) = q ⊗ p ✔. Woh q 3 mein ek sign se differ karte hain — exactly kyunki p × q = − ( q × p ) . Rotations commute nahi karte, aur cross product isliye hai.
Worked example F · same rotation, do tuples
Cell B se q B = ( 2 2 , 0 , 0 , 2 2 ) lo aur − q B = ( − 2 2 , 0 , 0 , − 2 2 ) .
Forecast: kya woh ek vector ko same tarah rotate karte hain ya opposite tarah?
Sandwich v ′ = q ⊗ v ⊗ q − 1 mein, q → − q replace karo.
Phir ( − q ) ⊗ v ⊗ ( − q ) − 1 . Lekin ( − q ) − 1 = ∥ q ∥ 2 ( − q ) ∗ = − q − 1 .
Yeh step kyun? Conjugation vector part flip karta hai lekin − 1 through multiply karta hai, toh inverse bhi − 1 pick up karta hai.
Toh ( − 1 ) ⋅ ( − 1 ) = + 1 : do minus signs cancel kar jaate hain, exactly q ⊗ v ⊗ q − 1 dete hain.
Verify: dono ka norm 1 hai (check: ( − 2 2 ) 2 + ( − 2 2 ) 2 = 1 ✔) aur woh identical vectors produce karte hain. Same physical 9 0 ∘ turn, do naam. Yeh S 3 → S O ( 3 ) double cover hai.
( 1 , 0 , 0 ) ko z ke baare mein 9 0 ∘ turn karo
q = ( 2 2 , 0 , 0 , 2 2 ) use karo (Cell B). Vector v = ( 1 , 0 , 0 ) , pure quaternion v = ( 0 , 1 , 0 , 0 ) ki tarah likha.
Forecast: z ke baare mein 9 0 ∘ turn x -arrow ko y -arrow par bhejni chahiye. Compute karne se pehle v ′ predict karo.
Pehla product t = q ⊗ v . Scalar = q 0 ⋅ 0 − ( 0 , 0 , 2 2 ) ⋅ ( 1 , 0 , 0 ) = 0 . Vector = q 0 ( 1 , 0 , 0 ) + 0 ⋅ q v + ( 0 , 0 , 2 2 ) × ( 1 , 0 , 0 ) .
q 0 ( 1 , 0 , 0 ) = ( 2 2 , 0 , 0 ) .
cross = ( 0 , 0 , 2 2 ) × ( 1 , 0 , 0 ) = ( 0 , 2 2 , 0 ) .
Toh t = ( 0 , 2 2 , 2 2 , 0 ) .
Yeh step kyun? Hum sandwich left-to-right build karte hain; t ek temporary hai, answer nahi.
Doosra product v ′ = t ⊗ q − 1 , jisme q − 1 = q ∗ = ( 2 2 , 0 , 0 , − 2 2 ) .
Scalar = t 0 q 0 − 1 − t ⋅ q − 1 = 0 − ( 2 2 , 2 2 , 0 ) ⋅ ( 0 , 0 , − 2 2 ) = 0 .
Vector = t 0 q − 1 + q 0 − 1 t + t × q − 1
= 0 + 2 2 ( 2 2 , 2 2 , 0 ) + ( 2 2 , 2 2 , 0 ) × ( 0 , 0 , − 2 2 ) .
middle term = ( 2 1 , 2 1 , 0 ) .
cross = ( 2 2 , 2 2 , 0 ) × ( 0 , 0 , − 2 2 ) = ( − 2 1 , 2 1 , 0 ) .
sum = ( 0 , 1 , 0 ) .
Toh v ′ = ( 0 , 0 , 1 , 0 ) , yaani vector ( 0 , 1 , 0 ) .
Verify: x -arrow ( 1 , 0 , 0 ) y -arrow ( 0 , 1 , 0 ) ban gaya — exactly z ke baare mein + 9 0 ∘ turn ✔. Length preserved: 0 2 + 1 2 + 0 2 = 1 ✔ (rotations kabhi stretch nahi karte). Scalar part 0 raha, toh v ′ abhi bhi ek pure quaternion hai ✔.
Figure mein input arrow (burnt orange, x ke along) output arrow (teal, y ke along) tak swing karta hua dikhta hai, plum mein 9 0 ∘ arc ke saath. Sandwich ne wahi kiya jo geometry ne demand kiya tha.
Worked example H · integrator ek thoda-off quaternion deta hai
Ek timestep ke baad propagator q = ( 0.9 , 0.1 , 0.2 , 0.3 ) return karta hai.
Forecast: iska norm 1 se upar hai ya neeche? Roughly kitna?
Norm2 : 0.81 + 0.01 + 0.04 + 0.09 = 0.95 .
Norm: 0.95 ≈ 0.97468 .
Yeh step kyun? 0.95 < 1 matlab tuple unit 3-sphere S 3 ke andar drift kar gaya; yeh ab ek valid rotation encode nahi karta.
Project back: har component ko norm se divide karo:
q ← 0.97468 q = ( 0.92338 , 0.10260 , 0.20520 , 0.30780 ) .
Yeh step kyun? Charon ko same factor se scale karna 4D mein direction rakhta hai (same rotation) lekin point ko sphere surface par push karta hai.
Verify: new norm2 = 0.9233 8 2 + 0.1026 0 2 + 0.2052 0 2 + 0.3078 0 2 = 1.0000 ✔ (4 dp tak). Sasta fix, har control cycle mein karo.
Worked example I · spacecraft slew command
Mission control kehta hai: "Telescope ko body axis n ^ = 3 1 ( 1 , 1 , 1 ) ke baare mein 12 0 ∘ slew karo." Command quaternion banao.
Forecast: axis already unit hai (check karo!) — toh vector slots mein kaun se numbers aayenge?
Unit axis confirm karo: ( 3 1 ) 2 ⋅ 3 = 3 1 ⋅ 3 = 1 ✔. Acha, encoding ke liye ek unit axis chahiye.
Half-angle: 12 0 ∘ /2 = 6 0 ∘ .
Scalar: cos 6 0 ∘ = 0.5 .
Vector: n ^ sin 6 0 ∘ = 3 1 ( 1 , 1 , 1 ) ⋅ 2 3 .
Note karo 3 1 ⋅ 2 3 = 2 1 , toh vector = ( 2 1 , 2 1 , 2 1 ) = ( 0.5 , 0.5 , 0.5 ) .
Yeh step kyun? 3 beautifully cancel ho jaate hain — diagonal ke baare mein ek 12 0 ∘ turn clean quaternion ( 2 1 , 2 1 , 2 1 , 2 1 ) deta hai, ek famous wala (yeh axes ko cyclically permute karta hai x → y → z ).
Command q = ( 0.5 , 0.5 , 0.5 , 0.5 ) .
Verify: norm2 = 0.25 ⋅ 4 = 1 ✔. Ise do baar apply karna (q ⊗ q , ek 24 0 ∘ turn) phir bhi unit hona chahiye aur uska scalar = 0.25 − ( 0.5 , 0.5 , 0.5 ) ⋅ ( 0.5 , 0.5 , 0.5 ) = 0.25 − 0.75 = − 0.5 — cos 12 0 ∘ = − 0.5 ke saath consistent ✔.
Worked example J · rotation wapas padhna
Diya gaya q = ( 0.5 , 0.5 , 0.5 , 0.5 ) (Cell I ka answer, lekin pretend karo ki tumhe uska origin nahi pata). Angle θ aur axis n ^ recover karo.
Forecast: scalar 0.5 = cos ( kuch ) hai — kaun sa angle, aur yaad raho ise double karna hai.
Scalar se angle: q 0 = cos 2 θ = 0.5 ⇒ 2 θ = arccos ( 0.5 ) = 6 0 ∘ ⇒ θ = 12 0 ∘ .
Yeh step kyun? arccos cosine ko undo karta hai — yeh jawab deta hai "kis half-angle ka yeh cosine hai?" Phir hum true turn recover karne ke liye 2 se multiply karte hain.
Vector se axis: n ^ = sin ( θ /2 ) q v = sin 6 0 ∘ ( 0.5 , 0.5 , 0.5 ) = 0.86603 ( 0.5 , 0.5 , 0.5 ) = ( 0.57735 , 0.57735 , 0.57735 ) .
Yeh step kyun? Vector slot n ^ sin 2 θ hai, toh sin 2 θ se divide karne par length nikal jaati hai aur pure unit axis = 3 1 ( 1 , 1 , 1 ) bachti hai.
Degenerate warning: agar q 0 = ± 1 toh sin 2 θ = 0 aur step 2 zero se divide karta hai — woh identity hai (Cell A), jahan axis genuinely undefined hai. Divide karne se pehle detect karo.
Verify: recover kiya θ = 12 0 ∘ ✔ aur n ^ = ( 0.57735 , … ) jiske saath norm2 = 3 ⋅ 0.5773 5 2 = 1.0000 ✔ — ek unit axis, exactly Cell I ke input se match karta hua.
Recall Cell D: ek
18 0 ∘ rotation ke scalar part mein kya khaas hota hai?
cos 9 0 ∘ = 0 , toh q 0 = 0 — yeh ek pure quaternion hai.
Recall Cell J: quaternion se
θ wapas kaise lete hain?
θ = 2 arccos ( q 0 ) , phir n ^ = q v / sin 2 θ (q 0 = ± 1 division-by-zero dekho).
Recall Cell E: kaun sa term
p ⊗ q = q ⊗ p banata hai?
Cross product p × q , jo swap par sign flip karta hai.
Related build-outs: Axis-Angle Representation , Quaternion Kinematics — dq/dt , Rotation Matrices SO(3) , Euler Angles and Gimbal Lock , Spacecraft Attitude Determination , Complex Numbers as 2D Rotations .
Recover angle from a unit quaternion. θ = 2 arccos ( q 0 ) .
Recover the axis from a unit quaternion. n ^ = q v / sin ( θ /2 ) (undefined when
q 0 = ± 1 ).
Quaternion for 12 0 ∘ about 3 1 ( 1 , 1 , 1 ) . ( 0.5 , 0.5 , 0.5 , 0.5 ) .
Why does q 0 = 0 mean a half-turn? cos ( θ /2 ) = 0 ⇒ θ /2 = 9 0 ∘ ⇒ θ = 18 0 ∘ .