前幾周爲了準備試用期彙報的東西,暫停了幾周(瑪雅居然停了4周),可這勁兒把軟渲染做了好多好多~
然鵝居然並沒有大佬對這個部分表示讚賞~ T-T ~哎雖然小兒科但是也讚賞一下呀喂~ T-T ~
不過話說,就算是鞏固吧~打破了沒練手的心虛~然後,繼續好好學習~
這本書是準備在軟渲染裏邊加IK時遇到困難,然後朋友推薦的~打算先看一下前幾章,直到實現IK爲止~
(↑ flag!)
名詞
- Screw: 剛體可以通過“繞某直線的旋轉+平行該直線的平移”來達到任何位置。
- Twist: Screw的無窮小量。描述了Screw在某一瞬間的速度。
- Wrench: 任何作用於剛體上的力都可用“沿着某直線的力+繞該直線的扭矩”來等價。它和Twist對偶,可以直接使用Twist相關的許多理論。
- Rigid Motion: 剛體的、連續的移動
- Rigid Displacement: 通過Rigid Motion從一個位置挪到另一個位置的淨移動(net movement)。
- Rigid body transformation:
- 任意兩點之間的距離保持
- 叉積保持
- Configuration: 在剛體上某點處定義一個笛卡爾座標,然後去跟蹤它相對於這個固定幀而言的動作。如果用g(t)來表示映射,那麼 g(vx),g(vy),g(vz) 就是新的Configuration。
旋轉
- Rotation Matrix
可以通過旋轉後的矩陣在原矩陣中的xyz的座標來定義 - SO(3): special orthogonal
- 稱爲旋轉羣(閉合、一致、可逆、結合)
- 滿足一一對應 -> 故爲Configuration空間
- 定義:
RRT=1 detR=+1
- 定理:
R(v×w)=R(v)×R(w) R(w)∧RT=(Rw)∧ - 距離保持、旋轉保持
- so(3): skew-symmetric
- 定義:
ST=−S
- 定理:
a^2=aaT−||a||2I a^3=−||a||2a^
- 叉積的矩陣表示:
它是反對稱的(skew symmetric)a×b=(a)∧b=a^b=⎡⎣⎢0a3−a2−a30a1a2−a10⎤⎦⎥b
- 定義:
- so(3)->SO(3)的指數座標(exponential coordinate)【旋轉羣的正則座標】
考慮一個單位轉速的剛體,它t時刻的速度爲:q˙(t)=ω×q(t)=ω^q(t)
它t時刻的旋轉爲:q(t)=eω^tq(0)
亦即:R(ω,θ)=eω^θ
通過so(3)的兩個性質,可將exp展開式化簡爲:eω^θ=I+ω^sinθ+ω^2(1−cosθ)(Rodrigue's formula)
可以證明,eω^θ 是SO(3)的
從幾何意義上說,so(3)代表的是旋轉軸,而SO(3)代表的是繞該旋轉軸旋轉θ角度。
而且,從so(3)到SO(3)是一個滿射,對任意一個SO(3),均可構造出對應的so(3)。 - 歐拉座標
- 事實上沒有哪個歐拉座標可以免除不連續點的這個問題 ( lack of existence of global, smooth solution to the inverse problem of determining the Euler angles from the rotation )
- 事實上SO(3)的任何3D的表示方法都無法做到唯一性。
- ZYZ座標:繞Z-繞Y-繞Z
- YZX座標:繞X-繞Z-繞Y
- 四元數(Quaternions)
- 旋轉乘法:
令Q=(q0,q⃗ ),P=(p0,p⃗ )
那麼:Q⋅P=(q0p0−q⃗ ⋅p,q0p⃗ +p0q⃗ +q⃗ ×p⃗ ) - 對於指數座標下的
ω和θ ,其對應的四元數形式爲:
Q=(cos(θ/2),ωsin(θ/2)) - 沒有3維座標系下的唯一性問題
- 旋轉乘法:
- SE(3)
- 包含一個三維向量p和SO(3)的R,分別代表平移和旋轉
- 對於
g∈SE(3) ,用 g¯=[R0p1] 表示其齊次矩陣表達方法
- se(3)
- 考慮一個繞軸
ω 以單位速度旋轉的情形,q爲軸上一點:
p˙(t)=ω×(p(t)−q)=ω×p(t)−ω×q
[p˙(t)0]=[ω^0−ω×q0][p(t)1]
把上述矩陣記爲ξ^ (注意這是一個將點變換成速度的矩陣,所以其最後一個數是0):
p¯˙=ξ^p¯
於是解爲:
p^(t)=eξ^tp¯(0)
其中ξ^=[ω^0−ω×q0](1) - 純平移的情況:
對於p˙(t)=v ,有:
ξ^=[00v0](2) - 式(1)和式(2)是上述反對稱矩陣so(3)的泛化,亦即se(3):
se(3):={(v,ω^):v∈R3,ω^∈so(3)}
齊次形式爲:
ξ^=[ω^0v0]∈R4×4
se(3)中的元素代表着一個twist,亦即歐式羣的無窮小量發生器(infinitesimal generator),用∨ 來表示:
[ω^0v0]∨=[vω]
[vω]∧=[ω^0v0]
純平移:可以看出se(3)中的矩陣,其2次冪及以上均爲0,故可以輕易得到其指數式的展開結果:
eξ^θ=[I0vθ1](3)
旋轉和平移:這個情況比較複雜,使用中間變量和g=[I0ω×v1] ,以及計算可得的ξ^′=g−1ξ^g=[ω^0(ωTv)ω0] ,可得:eξ^θ=eg(ξ^′θ)g−1=geξ^θg−1
eξ^θ=[eω^θ0hωθ1]=[eω^θ0(I−eω^θ)(ω×v)+ωωTvθ1],(ω≠0)(4)
twist的指數給出了剛體的相對運動,這個se(3)到SE(3)的映射是滿射。
- 考慮一個繞軸
- Screw motion
- 定義(S)
- 軸(l)、旋轉角(pitch)、大小(M):繞着l軸旋轉θ=M角度,並沿着l軸平移hθ角度。h爲無窮大時表示是一個沿着l軸純平移M距離。
- 公式:
gp=q+eω^θ(p−q)+hθω
g[p1]=[eω^θ0(I−eω^θ)q+hθω1][p1](5)
中間的矩陣是對應的rigid motion
注意到公式(4),如果選擇,那麼v=−ω×q+hω ξ=(v,w) 就是式(5)的矩陣。
- 從rigid motion到screw motion:
- Pitch(平移與旋轉動作的比例,純平移情況下是無窮小的pitch):
h=ωTv/||ω||2 - Axis:
平移旋轉:l={(ω×v)/||ω||2+λω:λ∈R}
純平移:l={0+λv:λ∈R} - Magnitude:
平移旋轉:M=||ω||
純平移:M=||v||
- Pitch(平移與旋轉動作的比例,純平移情況下是無窮小的pitch):
- 從screw motion 到 rigid motion:
- 對於任意一個具有軸l、旋轉角h和大小M的screw motion,存在一個單位縮放的twist
ξ ,使得在這個screw下的rigid motion是Mξ
純平移:ξ^=[00v0]
旋轉平移:ξ^=[ω^0−ω×q+hω0]
- 對於任意一個具有軸l、旋轉角h和大小M的screw motion,存在一個單位縮放的twist
- 幾個例子
- zero pitch screw(h=0):繞着某軸的純轉動
- infinite pitch screw(h=∞):純平移,M代表移動距離
- unit twist:M=1
- 上述公式中,q點的選取是隨意的
- 於是終於證明了,每一個剛體動作都可以用一個繞某軸的旋轉加上繞該軸的平移來表示
- 定義(S)