スクリーンショット_2019-12-31_10

Processingでリンク機構

Twitterでとおちゃさんのつぶやきを見て、一度やってみたいと思っていたリンク機構をProcessingでやってみました。
(リンク機構に関する情報は最近は別アカウント(上木 敬士郎/Keishiro Ueki)から発信されています)

コードはこちら(Processingのpythonモードです)。

def setup():
   size(400,400)
           
def draw():
   background(255)
   
   x1, y1 = 120, 280
   x4, y4 = 320, 320
   
   R_12 = 100
   theta_12 = radians(frameCount)

   x2 = x1 + R_12*cos(theta_12)
   y2 = y1 + R_12*sin(theta_12)
       
   R_23 = 200
   R_34 = 280
   R_24 = dist(x2, y2, x4, y4)
   theta_24 = atan2(y4-y2, x4-x2)
   theta_324 = -acos((R_23**2+R_24**2-R_34**2)/(2*R_23*R_24))
   
   x3 = x2 + R_23*cos(theta_324 + theta_24)
   y3 = y2 + R_23*sin(theta_324 + theta_24)
   
   stroke(100)
   strokeWeight(4)
   line(x1, y1, x2, y2)
   line(x2, y2, x3, y3)
   line(x3, y3, x4, y4)

   stroke(0)
   strokeWeight(10)
   point(x1, y1)
   point(x2, y2)
   point(x3, y3)
   point(x4, y4)
  

コードの中で (x1, y1) の形で点の座標を指定してますが、番号と位置の関係は下図の通り。

スクリーンショット 2019-12-31 10.45.04

点1、点4は固定点で、点2は点1の周りを一定速度で回転するようにしたので、計算が必要なのは点3の座標を求める部分。

これはどうしようか悩んだんですが、
 ① 点2と点3を結ぶリンクの長さ
 ② 点3と点4を結ぶリンクの長さ
が決まっていて、各時刻の点2、点4の座標も決まっているので
 ③ 点2と点4の距離
も分かっている。

つまりこれは、点2、3、4が作る三角形の三辺の長さから角度を求める計算。...余弦定理ですな!

ということでコーディング。余弦定理の式を忘れていてググったのは内緒。

今回の記事のコードは最低限のリンク機構を作るシンプルなものですが、Processingなので色々効果をつけることもできます。...楽しい。


この記事が気に入ったらサポートをしてみませんか?