660 文字
3 分
正規直交基底の構築 (3)
WARNING

この方法は基底を構築しない.

鏡映を利用する方法#

鏡映を利用する方法を確認する

Comparing ONB Accuracy で助言を頂いたので整理をする.

mla, 2025-01-12 Interesting. Simpler to derive Frisvad’s equation with a 3D reflection rather than using quaternions (given unit vectors p,q, reflection in plane with normal p-q exchanges p and q).

ベクトルの鏡映は次のように定義される.

r=v2(vn^)n^\boldsymbol{r} =\boldsymbol{v} - 2 (\boldsymbol{v}\cdot\hat{\boldsymbol{n}}) \hat{\boldsymbol{n}}

一般的な場合から考える.

q=p2(pn^)n^=p2(ppqpq)pqpq=p2(p2pqp2+q22pq)(pq)\begin{align*} \boldsymbol{q} &=\boldsymbol{p} - 2 (\boldsymbol{p}\cdot\hat{\boldsymbol{n}}) \hat{\boldsymbol{n}}\\ &=\boldsymbol{p} - 2 \left(\boldsymbol{p}\cdot\frac{\boldsymbol{p} - \boldsymbol{q}}{\|\boldsymbol{p} - \boldsymbol{q}\|}\right) \frac{\boldsymbol{p} - \boldsymbol{q}}{\|\boldsymbol{p} - \boldsymbol{q}\|}\\ &=\boldsymbol{p} - 2 \left(\frac{\|\boldsymbol{p}\|^{2} - \boldsymbol{p}\cdot\boldsymbol{q}}{\|\boldsymbol{p}\|^{2} + \|\boldsymbol{q}\|^{2} - 2 \boldsymbol{p}\cdot\boldsymbol{q}}\right) (\boldsymbol{p} - \boldsymbol{q}) \end{align*}

ここで p,q\boldsymbol{p}, \boldsymbol{q} を単位ベクトルとすると, 次のように p\boldsymbol{p}q\boldsymbol{q} を交換する式になっていることがわかる.

q=p(1pq1pq)(pq)=q\boldsymbol{q} =\boldsymbol{p} - \left(\frac{1 - \boldsymbol{p}\cdot\boldsymbol{q}}{1 - \boldsymbol{p}\cdot\boldsymbol{q}}\right) (\boldsymbol{p} - \boldsymbol{q}) =\boldsymbol{q}

特異点は p=q\boldsymbol{p}=\boldsymbol{q} となるが, 交換は不要ということに他ならない. 単位ベクトルであることを強調すると次のようになる.

q^=p^2(p^n^)n^=p^(p^p^q^1p^q^)(p^q^)=q^\hat{\boldsymbol{q}} =\hat{\boldsymbol{p}} - 2 (\hat{\boldsymbol{p}}\cdot\hat{\boldsymbol{n}}) \hat{\boldsymbol{n}} =\hat{\boldsymbol{p}} - \left(\hat{\boldsymbol{p}}\cdot\frac{\hat{\boldsymbol{p}} - \hat{\boldsymbol{q}}}{1 - \hat{\boldsymbol{p}}\cdot\hat{\boldsymbol{q}}}\right) (\hat{\boldsymbol{p}} - \hat{\boldsymbol{q}}) =\hat{\boldsymbol{q}}

この交換式を使って s^=(0,0,1)T\hat{\boldsymbol{s}}=(0,0,1)^{\mathsf{T}} から t^\hat{\boldsymbol{t}} への回転とするならば,

ω=ω2(ωn^)n^=ω2(ωs^t^s^t^)s^t^s^t^=ω(ω(s^t^)1t^z)(s^t^)\begin{align*} \boldsymbol{\omega} &={}_{\perp}\boldsymbol{\omega} - 2 ({}_{\perp}\boldsymbol{\omega}\cdot\hat{\boldsymbol{n}}) \hat{\boldsymbol{n}}\\ &={}_{\perp}\boldsymbol{\omega} - 2 \left({}_{\perp}\boldsymbol{\omega}\cdot\frac{\hat{\boldsymbol{s}} - \hat{\boldsymbol{t}}}{\|\hat{\boldsymbol{s}} - \hat{\boldsymbol{t}}\|}\right) \frac{\hat{\boldsymbol{s}} - \hat{\boldsymbol{t}}}{\|\hat{\boldsymbol{s}} - \hat{\boldsymbol{t}}\|}\\ &={}_{\perp}\boldsymbol{\omega} - \left(\frac{{}_{\perp}\boldsymbol{\omega}\cdot(\hat{\boldsymbol{s}} - \hat{\boldsymbol{t}})}{1 - \hat{t}_{z}}\right) (\hat{\boldsymbol{s}} - \hat{\boldsymbol{t}})\\ \end{align*}

t^z=1\hat{t}_{z}=1 のときに特異点となるが, これは s^=t^\hat{\boldsymbol{s}}=\hat{\boldsymbol{t}} なので回転は不要ということに他ならない.

Issues#

接空間の zz 軸に対称な分布に適用するような場合は問題なさそうに見えるが, Frisvad の方法に合わせるなら対応が必要になるのではないだろうか?

見通しをよくするため 2 次元で考える.

2次元で動作を確認する

s^\hat{\boldsymbol{s}} に対する ω{}_{\perp}\boldsymbol{\omega}t^\hat{\boldsymbol{t}} に対する ω\boldsymbol{\omega} は直感に反している. 図とベクトルの鏡映式を眺めると, ω{}_{\perp}\boldsymbol{\omega} をある平面に対して反転させる必要があるようだ.

ある平面の法線ベクトル m^\hat{\boldsymbol{m}} は次のようになる.

m=n^(s^n^)s^m^={mms^n^<10otherwise\begin{align*} \boldsymbol{m} &=\hat{\boldsymbol{n}} - (\hat{\boldsymbol{s}}\cdot\hat{\boldsymbol{n}}) \hat{\boldsymbol{s}}\\ \hat{\boldsymbol{m}} &= \begin{cases} \frac{\boldsymbol{m}}{\|\boldsymbol{m}\|} & |\hat{\boldsymbol{s}}\cdot\hat{\boldsymbol{n}}|\lt 1\\ \boldsymbol{0} & \text{otherwise} \end{cases} \end{align*}

その平面に対して反転すると次のようになる.

ω={ω2(m^ω)m^s^t^<1ωotherwise{}_{\perp}\boldsymbol{\omega}^{'} = \begin{cases} {}_{\perp}\boldsymbol{\omega} - 2 (\hat{\boldsymbol{m}}\cdot{}_{\perp}\boldsymbol{\omega}) \hat{\boldsymbol{m}} & |\hat{\boldsymbol{s}}\cdot\hat{\boldsymbol{t}}|\lt 1\\ {}_{\perp}\boldsymbol{\omega} & \text{otherwise} \end{cases}

ベクトルの鏡映式に代入すると, 直感に従った結果を得る.

ω=ω2(ωn^)n^\boldsymbol{\omega}^{'} ={}_{\perp}\boldsymbol{\omega}^{'} - 2 ({}_{\perp}\boldsymbol{\omega}^{'}\cdot\hat{\boldsymbol{n}}) \hat{\boldsymbol{n}}

Acknowledgements#

鏡映を利用する方法を共有して頂いた mla 氏に感謝いたします.

References#

正規直交基底の構築 (3)
https://hasenpfote.netlify.app/posts/building-an-orthonormal-basis-3/
作者
Hasenpfote
公開日
2025-01-15
ライセンス
CC BY-SA 4.0