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) の形で点の座標を指定してますが、番号と位置の関係は下図の通り。
点1、点4は固定点で、点2は点1の周りを一定速度で回転するようにしたので、計算が必要なのは点3の座標を求める部分。
これはどうしようか悩んだんですが、
① 点2と点3を結ぶリンクの長さ
② 点3と点4を結ぶリンクの長さ
が決まっていて、各時刻の点2、点4の座標も決まっているので
③ 点2と点4の距離
も分かっている。
つまりこれは、点2、3、4が作る三角形の三辺の長さから角度を求める計算。...余弦定理ですな!
ということでコーディング。余弦定理の式を忘れていてググったのは内緒。
今回の記事のコードは最低限のリンク機構を作るシンプルなものですが、Processingなので色々効果をつけることもできます。...楽しい。
この記事が気に入ったらサポートをしてみませんか?