※自分用メモです
IKやPBDでは、間接の角度制限を実装するための拘束条件を設定するために、各関節の位置を変更した際の勾配を式として与える必要があります。
論文だとサラッと流されちゃうんですけど、この式を得るのは数式と日常的に格闘しているわけではない一般人感覚からすると結構面倒です。
なので導出も含めて覚書を残しておきます。
§1. 3つの点が成す角度
まず単純化して、三つの点が成す角度について考えてみます。
このとき、角度θは
と表せられます。
これを各変数について偏微分すると
こうなります。
これでこの単純なモデルでは、各関節についての∇が計算できそうです。
§2. 多関節モデルへの適応
実際には上記のような単純なモデルではないので、これをもとに多関節&初期姿勢のあるモデルを考えてみます。
A(親)からB(子)へ向かって親子付けがされた関節だとします。
このモデルでは初期姿勢を考慮するので、各関節ごとに現在位置と安定位置(初期姿勢の位置)があります。
ここからどれだけ変位しているかをθとすることで、上図のように表すことができます。
3次元でも変位の方向は必ず二次元化できるので同様に考えることができます。
ただし実際にはSを直接動かすことはできず、Sを動かすにはAの親 C を動かす必要があります。
これを表現するために、θではなくφを使用して次のように考えます。
C-A-B が成す角度を φ 安定角度を φ0 とします。
3次元の場合は、回転平面 A-B-S が成す平面上に射影した位置をCとして考えます。
こうすると§1の式がそのまま使えて
こうなります。
見やすくするために新たにP,Qを定義しました。
さらにT,Rを定義して整理すると
こうなります。
大分シンプルになりました。
§3. 3次元での一般的な形
§2で得た式から、3次元で使用する場合のより一般的な形を考えます。
まず§2で使用したこの図の
A,B,C,S のそれぞれの三次元上での位置を A3,B3,C3,S3 とすると
となる。
U,V は、この回転平面を構築する座標軸です。
§4. PBDでの拘束条件
ではこれを用いた拘束条件の例として、PBD での角度制限を考えてみます。
拘束条件 Cj は φ が φ0 であることなので、§2,§3の式を使用して
勾配は
となる。
追加メモ
微積を計算するときはWolframAlpha
数式や図を描くときはMathcha
を使用すると便利です。
PBDの論文はこちらです
PBDの論文:https://matthias-research.github.io/pages/publications/posBasedDyn.pdf
XPBDの論文:https://matthias-research.github.io/pages/publications/XPBD.pdf
XPBDの和訳をされている記事:https://raw.githubusercontent.com/nobuo-nakagawa/xpbd_jp/master/XPBDjp.pdf
PBDの剛体表現について:https://matthias-research.github.io/pages/publications/PBDBodies.pdf