アジマティクス

ここをこうするとおもしろい

人が壁を押すリンク機構を数式で作った

先日、こんなツイートを見かけました。

はぇー面白い

人間なんてどんだけ威張ってもしょせん回転してるだけなんやな...という気分にさせてくれます。

こういう歯車とかジョイントとか関節とかでできた機械のことを「リンク機構」と言うそうです。なんとなく、子供心を刺激されるものがあります。これが家にあったら寝食を忘れて回し続けてしまうことでしょう。

ていうかこれ数式で表現できそうやん! ワイも作ってみたいぞ!

 

作った

作りました。

f:id:motcho:20161025151409g:plain

いいですねえ。ずっと見てられます。数式だけで出来てるとは思えない人間のリアルさというか、足腰にギュっと力入れる感じのとことか最高にグッときますね。まぁそのへんはもとの機械のすごさなのですが。

こちらの数式は以下のリンクから見ることができます。

mechanical man

見るだけでなく、いろいろといじることができます。黒で表示されている5つの固定点は直接動かせるので、例えば一番上の点をちょっとプラス側に動かしてみるとこうなります。

f:id:motcho:20161025152655g:plain

彼は仕様上腕が曲がらないので爆弾運んでるみたいになる点はご容赦ください。

この動画をtwitterに貼ったところ「こんなことできるのか」「どうやってるんだ」「こんなの作るには何勉強したらいいんだ」などの声がありましたので、解説というほどでもないですが「どうやって出来てるのか」ということにちょっと触れておきたいと思います。

つくりかた

基本的には、なんのことはない、画像にグラフを重ねて置いていってるだけであります。

f:id:motcho:20161025183857p:plain

 

まず動かない点が5つあるのでそれらを座標平面上に指定します。

f:id:motcho:20161026211320p:plain

 

歯車の半径を指定してその上に点を取って回します。

f:id:motcho:20161025192342g:plain

 

さて、ここからが本題なのですが、

f:id:motcho:20161025203036p:plain

この図中の「点1」とは、一体どういう点でしょうか。ちょっと考えてみましょう。

 

そうだね。点3と点4からの距離が常に等しくなる点だね。

点3点2の周りをぐるぐると動いているわけですが、点3がどれだけ動いても点3点1間と、点4点1間の距離は常に同じまま変わらないわけです。というか、同じまま変わらないような位置に点1をとる、といった感じでしょうか。

もともとが3Dプリンタの樹脂かなんかでできた物体ですから、ジョイント部分は伸び縮みができないのであたりまえっちゃああたりまえです。しかし数式で表現するとなるとそこを意識しておくことは重要です。

では実際にそのような位置に点を置くにはどうすればよいのか。こうですね。

f:id:motcho:20161025215528p:plain

点3と点4をそれぞれ中心とする円どうしの交点をとればいいわけです。2円の交点に点1があることをご確認ください。

平面図形「円」とはそもそも、ある一点からの距離が等しい点の集まりです。だとすると「2円の交点」とはなんなのかというと、2つある円の中心からの距離が等しい点になるというわけです。

さて。実はもうこれだけでほぼ完成です。残りの点もすべて、またどこか別の2点からの距離が等しい点になっています。具体的に見てみましょう。

f:id:motcho:20161026181336p:plain

f:id:motcho:20161026181351p:plain

 

f:id:motcho:20161026203007p:plain

f:id:motcho:20161026203036p:plain

というわけです。

 

f:id:motcho:20161026210417p:plain

はい。

たったこれだけのことで、いくら点をぐるぐる動かしても形が崩れない機構ができあがってくれるというのは感動的です。数式で作っているからこその感動といえるでしょう。

2円の交点を求める実際の式はこちらを参考にさせていただきました。ありがとうございます。

shogo82148.github.io

「円と円の交点を求める」だなんてやってることは単純なのにかなり複雑な式になるんですね。

点どうしをつなぐ

すべての点が用意できたら、あとは点どうしをつないでいくだけです。いろいろやり方はあるかとは思いますが、今回は媒介変数を使いました。

\left(a,b\right)と点\left(c,d\right)をつなぐには、\left(a\left(1-t\right)+ct,b\left(1-t\right)+dt\right)という式をおいてt0から1まで動かせば描けます。こういう式のおき方のことを媒介変数表示といい、tのことを媒介変数といいます。

この式はどういう仕組みかと言えば、\left(a,b\right)と点\left(c,d\right)t:1-tに内分する点において、t0から1まで動くときの軌跡」として線分を書く、といった感じです。

ちょっとよくわからないのでためしにt=0\left(a\left(1-t\right)+ct,b\left(1-t\right)+dt\right)に代入してみるとこの式は\left(a\cdot\left(1-0\right)+c\cdot 0,b\cdot\left(1-0\right)+d\cdot 0\right)=\left(a,b\right)となり、片方の点そのものになります。

今度はt=1を代入してみましょう。1-1=0をかけてabが消えて、\left(c,d\right)が残ります。これはもう片方の点にほかなりません。

では01の間にあるt=\frac{1}{2}とか入れてみるとどうなるでしょう。これは定義に則れば、点\left(a,b\right)と点\left(c,d\right)\frac{1}{2}:1-\frac{1}{2}に内分する点ですから、つまり1:1に内分する点ということになり、これは要するに中点です。

t=\frac{1}{3}だと1:2t=\frac{3}{5}とかだと3:2に内分する点となり、同じことを01間のすべての実数でやると、点\left(a,b\right)と点\left(c,d\right)をつなぐ線分ができるという寸法です(下図)。

f:id:motcho:20161027135322p:plain

できあがり

あとはすべてのジョイント部分でこれをやれば完成です。やっていることは、

 ①点をとる

 ②2点からの距離が等しい点をとる

 ③点どうしをつなぐ

ただこれだけなんですね。ただこれだけだからこそ、こんな単純な工程であれだけ複雑な動きをするものが生み出されるなんて数学ってすげーッ!!っていう感慨が増す気がします。

こういうの見てると他にもいろいろ作ってみたくなりますね。たとえば、拙作ですが過去にこんなものを作ったりしてます。

数式エディタさえあればできるので、この記事がみなさんのリンク機構つくるあそびの一助になれば幸いです。

ではまた。