LoginSignup
0
0

ギアチェンジによる回転数上げ

Last updated at Posted at 2023-02-21

限られた歯車で被駆動歯車の回転数を駆動歯車のⅹ倍にしたい。

歯車(ギア)、駆動歯車、被駆動歯車とはについては以下のhttps://le-www-live-s.legocdn.com/sc/media/files/support/mm のスクリーンショットを参考に

gear_説明.png

問題
制約条件の下で駆動歯車が1回転したとき被駆動歯車をx回転したい。あり得るxとその時の歯車の組み合わせを全て出力せよ(答えよ)。
制約条件
xは1より大きい整数。
使える歯車は歯数が12、歯数が20、歯数が28、歯数が36の4種類で、それぞれ2個ある。
歯車は全て互いに噛み合うように組む。

例) 
歯数36の歯車を駆動歯車にして、被駆動歯車を歯数12のものにする。
するとx=36/12=3で駆動歯車が1回転したとき被駆動歯車は3回転する。

歯数36の歯車を2個、歯数12の歯車を2個使えば、x=(36/12)×(36/12)=9
これは36を駆動歯車にし、同軸に歯数12と歯数36の歯車をさし、それに噛んでいる歯数12の被駆動歯車の回転数が駆動歯車の9倍ということである。

次の画像は歯数36、歯数28、歯数12を2個で組んだ例である。

駆動歯車 - コピー.png

この問題を解く上で歯車に関する重要な性質がある。
ギアの性質.png
※ギアBの回転数には影響はありませんが、回転方向は間に入るギアの数が偶数か奇数かで影響があります。コメントにてご指摘を頂いたので、追記しました。

要するにこの性質を数式にすると、
ギアの性質2.png
なので、直観的に理解できる。

実際にPythonで全探索した。

import itertools
gear=[36,36,28,28,20,20,12,12]
cmb={}

for z in itertools.permutations(gear,2):
    rotation = z[0]/z[1]
    if rotation.is_integer() and rotation>1:
        cmb[f'{z[0]}/{z[1]}'] = rotation
'''
8P3は約分により、8P2の回転数パターンと変わらない。    
for z in itertools.permutatinos(gear,3):
    rotation = (z[0]/z[1])*(z[1]/z[2])
    if rotation.is_integer() and rotation>1:
        cmb[f'({z[0]}/{z[1]})×({z[1]}/{z[2]})'] = rotation
'''

for z in itertools.permutations(gear,4):
    rotation = (z[0]/z[1])*(z[2]/z[3]) 
    #ギアを直列に繋いでも、得られる答えはギア2個と同じなので同軸に二つギアのパターンだけ
    if rotation.is_integer() and rotation>1:
        cmb[f'({z[0]}/{z[1]})×({z[2]}/{z[3]})'] = rotation

'''
8P5と8P4の結果は同じである。
直列に繋いだ場合は8P2と変わらない

'''
for z in itertools.permutations(gear,6):
    #2つの軸に2つずつギアをいれるパターン以外は約分によって上のパターンと同じになる。
    rotation = (z[0]/z[1])*(z[2]/z[3])*(z[4]/z[5])
    if rotation.is_integer() and rotation>1:
        cmb[f'({z[0]}/{z[1]})×({z[2]}/{z[3]})×({z[4]}/{z[5]})'] = rotation

'''
2つギアをつけれる軸は2個なので、8P6と変わらない
'''

for z in itertools.permutations(gear,8):
    #2つギアを付けられる軸が3個
    rotation = (z[0]/z[1])*(z[2]/z[3])*(z[4]/z[5])*(z[6]/z[7])
    if rotation.is_integer() and rotation>1:
        cmb[f'({z[0]}/{z[1]})×({z[2]}/{z[3]})×({z[4]}/{z[5]})×({z[6]}/{z[7]})'] = rotation


cmb

出力結果

{'36/12': 3.0,
 '(36/20)×(20/12)': 3.0,
 '(36/12)×(36/12)': 9.0,
 '(36/12)×(28/28)': 3.0,
 '(36/12)×(28/12)': 7.0,
 '(36/12)×(20/20)': 3.0,
 '(36/12)×(20/12)': 5.0,
 '(28/28)×(36/12)': 3.0,
 '(28/12)×(36/12)': 7.0,
 '(20/20)×(36/12)': 3.0,
 '(20/12)×(36/20)': 3.0,
 '(20/12)×(36/12)': 5.0,
 '(36/28)×(28/20)×(20/12)': 3.0,
 '(36/20)×(28/28)×(20/12)': 3.0,
 '(36/20)×(28/12)×(20/28)': 3.0,
 '(36/20)×(20/12)×(36/12)': 9.0,
 '(36/20)×(20/12)×(28/28)': 3.0,
 '(36/20)×(20/12)×(28/12)': 7.0,
 '(36/12)×(36/12)×(28/28)': 9.0,
 '(36/12)×(36/12)×(20/20)': 9.0,
 '(36/12)×(28/28)×(36/12)': 9.0,
 '(36/12)×(28/28)×(20/20)': 3.0,
 '(36/12)×(28/28)×(20/12)': 5.0,
 '(36/12)×(28/12)×(36/28)': 9.0,
 '(36/12)×(28/12)×(20/28)': 5.0,
 '(36/12)×(28/12)×(20/20)': 7.0,
 '(36/12)×(20/28)×(28/12)': 5.0,
 '(36/12)×(20/20)×(36/12)': 9.0,
 '(36/12)×(20/20)×(28/28)': 3.0,
 '(36/12)×(20/20)×(28/12)': 7.0,
 '(36/12)×(20/12)×(36/20)': 9.0,
 '(36/12)×(20/12)×(28/28)': 5.0,
 '(36/12)×(20/12)×(28/20)': 7.0,
 '(28/28)×(36/20)×(20/12)': 3.0,
 '(28/28)×(36/12)×(36/12)': 9.0,
 '(28/28)×(36/12)×(20/20)': 3.0,
 '(28/28)×(36/12)×(20/12)': 5.0,
 '(28/28)×(20/20)×(36/12)': 3.0,
 '(28/28)×(20/12)×(36/20)': 3.0,
 '(28/28)×(20/12)×(36/12)': 5.0,
 '(28/20)×(36/28)×(20/12)': 3.0,
 '(28/20)×(20/28)×(36/12)': 3.0,
 '(28/20)×(20/12)×(36/12)': 7.0,
 '(28/12)×(36/20)×(20/28)': 3.0,
 '(28/12)×(36/12)×(36/28)': 9.0,
 '(28/12)×(36/12)×(20/28)': 5.0,
 '(28/12)×(36/12)×(20/20)': 7.0,
 '(28/12)×(20/28)×(36/20)': 3.0,
 '(28/12)×(20/28)×(36/12)': 5.0,
 '(28/12)×(20/20)×(36/12)': 7.0,
 '(20/28)×(36/12)×(28/12)': 5.0,
 '(20/28)×(28/20)×(36/12)': 3.0,
 '(20/28)×(28/12)×(36/20)': 3.0,
 '(20/28)×(28/12)×(36/12)': 5.0,
 '(20/20)×(36/12)×(36/12)': 9.0,
 '(20/20)×(36/12)×(28/28)': 3.0,
 '(20/20)×(36/12)×(28/12)': 7.0,
 '(20/20)×(28/28)×(36/12)': 3.0,
 '(20/20)×(28/12)×(36/12)': 7.0,
 '(20/12)×(36/20)×(36/12)': 9.0,
 '(20/12)×(36/20)×(28/28)': 3.0,
 '(20/12)×(36/20)×(28/12)': 7.0,
 '(20/12)×(36/12)×(36/20)': 9.0,
 '(20/12)×(36/12)×(28/28)': 5.0,
 '(20/12)×(36/12)×(28/20)': 7.0,
 '(20/12)×(28/28)×(36/20)': 3.0,
 '(20/12)×(28/28)×(36/12)': 5.0,
 '(20/12)×(28/20)×(36/12)': 7.0,
 '(36/28)×(28/20)×(20/12)×(36/12)': 9.0,
 '(36/20)×(28/28)×(20/12)×(36/12)': 9.0,
 '(36/20)×(28/12)×(20/28)×(36/12)': 9.0,
 '(36/20)×(20/12)×(36/12)×(28/28)': 9.0,
 '(36/20)×(20/12)×(28/28)×(36/12)': 9.0,
 '(36/20)×(20/12)×(28/12)×(36/28)': 9.0,
 '(36/12)×(36/12)×(28/28)×(20/20)': 9.0,
 '(36/12)×(36/12)×(28/20)×(20/28)': 9.0,
 '(36/12)×(36/12)×(20/28)×(28/20)': 9.0,
 '(36/12)×(36/12)×(20/20)×(28/28)': 9.0,
 '(36/12)×(28/28)×(36/12)×(20/20)': 9.0,
 '(36/12)×(28/28)×(20/20)×(36/12)': 9.0,
 '(36/12)×(28/28)×(20/12)×(36/20)': 9.0,
 '(36/12)×(28/20)×(36/28)×(20/12)': 9.0,
 '(36/12)×(28/20)×(20/12)×(36/28)': 9.0,
 '(36/12)×(28/12)×(36/28)×(20/20)': 9.0,
 '(36/12)×(28/12)×(36/20)×(20/28)': 9.0,
 '(36/12)×(28/12)×(20/28)×(36/20)': 9.0,
 '(36/12)×(28/12)×(20/20)×(36/28)': 9.0,
 '(36/12)×(20/28)×(36/20)×(28/12)': 9.0,
 '(36/12)×(20/28)×(36/12)×(28/20)': 9.0,
 '(36/12)×(20/28)×(28/12)×(36/20)': 9.0,
 '(36/12)×(20/20)×(36/12)×(28/28)': 9.0,
 '(36/12)×(20/20)×(28/28)×(36/12)': 9.0,
 '(36/12)×(20/20)×(28/12)×(36/28)': 9.0,
 '(36/12)×(20/12)×(36/28)×(28/20)': 9.0,
 '(36/12)×(20/12)×(36/20)×(28/28)': 9.0,
 '(36/12)×(20/12)×(28/28)×(36/20)': 9.0,
 '(36/12)×(20/12)×(28/20)×(36/28)': 9.0,
 '(28/28)×(36/20)×(20/12)×(36/12)': 9.0,
 '(28/28)×(36/12)×(36/12)×(20/20)': 9.0,
 '(28/28)×(36/12)×(20/20)×(36/12)': 9.0,
 '(28/28)×(36/12)×(20/12)×(36/20)': 9.0,
 '(28/28)×(20/20)×(36/12)×(36/12)': 9.0,
 '(28/28)×(20/12)×(36/20)×(36/12)': 9.0,
 '(28/28)×(20/12)×(36/12)×(36/20)': 9.0,
 '(28/20)×(36/28)×(20/12)×(36/12)': 9.0,
 '(28/20)×(36/12)×(36/28)×(20/12)': 9.0,
 '(28/20)×(36/12)×(20/12)×(36/28)': 9.0,
 '(28/20)×(20/28)×(36/12)×(36/12)': 9.0,
 '(28/20)×(20/12)×(36/12)×(36/28)': 9.0,
 '(28/12)×(36/20)×(20/28)×(36/12)': 9.0,
 '(28/12)×(36/12)×(36/28)×(20/20)': 9.0,
 '(28/12)×(36/12)×(36/20)×(20/28)': 9.0,
 '(28/12)×(36/12)×(20/28)×(36/20)': 9.0,
 '(28/12)×(36/12)×(20/20)×(36/28)': 9.0,
 '(28/12)×(20/28)×(36/20)×(36/12)': 9.0,
 '(28/12)×(20/28)×(36/12)×(36/20)': 9.0,
 '(28/12)×(20/20)×(36/12)×(36/28)': 9.0,
 '(20/28)×(36/12)×(36/20)×(28/12)': 9.0,
 '(20/28)×(36/12)×(36/12)×(28/20)': 9.0,
 '(20/28)×(36/12)×(28/12)×(36/20)': 9.0,
 '(20/28)×(28/20)×(36/12)×(36/12)': 9.0,
 '(20/28)×(28/12)×(36/20)×(36/12)': 9.0,
 '(20/28)×(28/12)×(36/12)×(36/20)': 9.0,
 '(20/20)×(36/12)×(36/12)×(28/28)': 9.0,
 '(20/20)×(36/12)×(28/28)×(36/12)': 9.0,
 '(20/20)×(36/12)×(28/12)×(36/28)': 9.0,
 '(20/20)×(28/28)×(36/12)×(36/12)': 9.0,
 '(20/20)×(28/12)×(36/12)×(36/28)': 9.0,
 '(20/12)×(36/20)×(36/12)×(28/28)': 9.0,
 '(20/12)×(36/20)×(28/28)×(36/12)': 9.0,
 '(20/12)×(36/20)×(28/12)×(36/28)': 9.0,
 '(20/12)×(36/12)×(36/28)×(28/20)': 9.0,
 '(20/12)×(36/12)×(36/20)×(28/28)': 9.0,
 '(20/12)×(36/12)×(28/28)×(36/20)': 9.0,
 '(20/12)×(36/12)×(28/20)×(36/28)': 9.0,
 '(20/12)×(28/28)×(36/20)×(36/12)': 9.0,
 '(20/12)×(28/28)×(36/12)×(36/20)': 9.0,
 '(20/12)×(28/20)×(36/12)×(36/28)': 9.0}

8個のギアを使い、3つの軸各々に対して2つのギアを入れる制約条件を満たすパターンは全て被駆動ギアの回転数が9倍になる結果となった。
また、xの取りうる値は3,5,7,9となる。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0