C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

最小二乗法で円フィッティングを考える1

"続きやらない" って書いておきながら、こちらの続きを考えてます・・・。
ポリゴンなスケッチラインを円に書き換えるスクリプト - C#ATIA

ポリゴンの各始点から3点選び出して、3点通過円で処理して
いるのですが、エラーの可能性も排除出来ていない(例外処理すら
してない)のが心残りですし、ちょっとカッコ悪いので、
最小二乗法で円フィッティングを採用したい気持ちが山々。

小難しい数式を理解してコードにする能力を持ち合わせていない為、
pythonコードそのものを使わせてもらいたいです。
探した所、こちらがすんなりしていたので、参考にさせてもらいます。
最小二乗法による点群の円フィッティングMATLAB&Pythonサンプルプログラム - MyEnigma
当然、pythonの方です。(お世話になります)

"そのまま使えばいいじゃん" と思うのですが、これ程度でnumpyを
用意させるのが嫌なので、若干速度が落ちででも非numpyで
作りたいところです。(素直じゃない・・・)

”np.array” は標準のListでも構わないのでスルーしますが、この1行のみ
理解できません。
f:id:kandennti:20210816234418p:plain
調べると "inv” は逆行列で ”dot" は内積・・・まぁ確かに
名称からしてそうでしょうね。

コード読んでいる限り、行列に対して内積って計算できるのかな?
と言う疑問にぶつかりまくる。

適当な数値をパラメータに投げ込んだところ、こんな感じ。
f:id:kandennti:20210816234948p:plain
"F" と "G" を見ると、Fは3X3で Gは3X1 ・・・コード見ても
そうなると思ったよ。

Fusion360APIには便利なものがあって、Matrix2Dオブジェクト
がありまして、
Fusion 360 Help
逆行列はクリア出来そうです。

又、Vector3Dオブジェクトには内積があるので、こちらもクリアできそう。
Fusion 360 Help

"F" のインデックス0,1,2に対して "G" との内積行えば良いのかな?
と悩んでる。

悩んでる暇があったら、さっさとコード書いて実際に円を描いて
確認すれば良いんじゃないかと、今気が付く・・・。