C#ATIA

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

奇妙な歯車4

こちらの続きです。
奇妙な歯車3 - C#ATIA


色々と悩んで作業が止まってます。
どうせ作るのであれば、なるべく制約を除去したいと思っているのですが。

f:id:kandennti:20201116123913p:plain
赤:ターゲット円
青:ベース円
緑:ベースプロファイル(今回あまり関係ない)
と言う名称とします。

ターゲット円φ100でベース円φ50の場合、ターゲット円が1回転
ベース円が2回転すれば、プロファイルの転写は終了します。

f:id:kandennti:20201116123946p:plain
これが、ターゲット円φ100でベース円φ30の場合は、ターゲット円が
1回転するだけでは完了しないはずです。
100と30の最小公倍数は300の為、ターゲット円が3回転ベース円が10回転
すれば、プロファイルの転写は終了します。
(ターゲット円が1回転だけでは、1回転以降に引っかかる部分が出来る
可能性がある。)
pythonには最小公倍数を得る関数は無いようですが、最大公約数の関数
が有り、そこから算出出来るようです。
Pythonで最大公約数と最小公倍数を算出・取得 | note.nkmk.me
ここは何とかなりそうな気はしてます。

f:id:kandennti:20201116124010p:plain
続いて、ターゲット円φ100.5でベース円φ50.25の場合は、どうでしょう?
ターゲット円が1回転ベース円が2回転すれば、プロファイルの転写は終了
します。そのような数値にしました。
問題は困ったことに最大公約数の関数は整数である必要があり、
実数の場合エラーとなります。

そこで、ターゲット円とベース円の比率で考えれば2:1なので解決しそうな
気はしてます。
が、100:30の場合は、、あぁそうか。
有理数ならOKと言うルールにすれば良いのか。
調べると標準ライブラリfractionsモジュールで有理数が扱えそうなので
クリアできそう。
note.nkmk.me

ターゲット円<ベース円もOKにしたいので、何とかなるのかな?
イマイチすっきりしていないけど。