こちらの続きです。
最小二乗法で円フィッティングを考える1 - C#ATIA
・・・結局、探しても見つからない為、numpy使う事にしました。
こちらを参考にさせてもらいました。
円の最小二乗近似 - morikomorou’s blog
# param: list(Point3D) def circleFitting(points: list): x = np.array([p.x for p in points]) y = np.array([p.y for p in points]) A = np.vstack((x, y, np.ones((len(x))))).T v = -(x ** 2 + y ** 2) u, residuals, rank, s = np.linalg.lstsq(A, v, rcond=None) cx_pred = u[0] / (-2) cy_pred = u[1] / (-2) r_pred = np.sqrt(cx_pred ** 2 + cy_pred ** 2 - u[2]) return cx_pred, cy_pred, r_pred # param: list(Point3D) def getFittingCircle(points: list) -> adsk.core.Circle3D: x, y, r = circleFitting(points) return adsk.core.Circle3D.createByCenter( adsk.core.Point3D.create(x, y, 0), adsk.core.Vector3D.create(0, 0, 1), r )
getFittingCircle関数にpoint3Dのリストを突っ込むと、円フィッティング
されたCircle3Dが返ってきます。
調べてないのですが、円フィッティングさせている分、高精度になる
のですが、処理が少し遅くなる予感はしていたのですが、
ポリゴン→円の変換可能かな? チェックを簡素化したおかげで
僅かながら処理時間が短縮されました。
でも、処理時間短縮はここじゃないんだよなぁ。
ここにMSketch.CreateCircleがあるんだけど、使い方が分からない。
Fusion360_Small_Tools_for_Developers/TextCommands_txt_Ver2_0_8176.txt at master · kantoku-code/Fusion360_Small_Tools_for_Developers · GitHub
試したいんだけどなぁ。
1個づつじゃなくて、何処かに描いた円をコピペしてババッとやりたい。