この投稿は連載:「[幾何学的代数勉強会](https://kumadasu.com/series/learning-ga/ "幾何学的代数勉強会")」(全10回)の第9回です。

今回のテーマは「Tutorial: Geometric Computing in Computer Graphics using Conformal Geometric Algebra, Dietmar Hildenbrand」です。基礎を終えて応用の範囲へ飛び出していきます。ロボットアームの例と、点群から平面・球面を求める例が出てきます。

勉強会の内容

  • Application1(ロボットアームの先端の位置を決めて、各関節の角度を求める)とApplication2(点群を与えられて、それにもっとも合致する点・平面・球を求める)の例があげられている。
  • 議論1: Application 1 におけるジョイント \(P_0, P_1, P_2\) は同一平面内で回転するか。
    • ジョイントの種類が明示されていないが平面内で動作する前提で議論が展開されているようにみえる。可動範囲の指定もない。
    • ジョイントがこれ以上増えて自由度が増えた場合はどうするか?
    • 何らかの評価関数を置くのでは?実際のロボットアームはもっと自由度が高いものがありそう。
    • Step1,2は始点と終点を定める。Step3で途中のジョイントの位置を定めていく。
  • 議論2: 点対から点を取り出す(dissectする)方法
  • 議論3: Application2 式(56) \(\min (s^TBs)\) の最小化の計算過程がわからない。
    • ラグランジュの未定乗数法を使用している。
  • 議論4: 現在メンテされているGAのライブラリはないのか?
    • CLUCalc リンク切れが多く、2015年辺りで更新が止まっている。
    • GAViewer 更新されていない
    • sympy (Python) にGAが含まれている
    • clifford (Python)
    • Mathematica
    • Gaalop
    • Gaigen
  • 後日談:Pythonライブラリについて
    • 動画中ではsympyを使う流れになりましたが、sympy 1.0以降でgalgebraのサポートをやめていて galgebra モジュールに分離、かつ2年以上更新が止まっていることが判明。pip, Python3のサポートもされていない。
    • clifford ではpip, Python3対応がなされていて、活動も活発なため現状PythonでGAを使うのであればcliffordが良いと考えられる。

動画

次回

次回はPythonを使って実際にプログラミングしてみます。