初めに
以前にも運動学自体の記事は書いたのですが,n軸に対応するときに,賢い書き方はないのかと考えていたところ再帰することができるのではないかと考えた所です.
再帰させたい処理
arm.py
x1 = L1 * np.cos(deg1)
y1 = L1 * np.sin(deg1)
x2 = x1 + L2 * np.cos(deg1+deg2)
y2 = y1 + L2 * np.sin(deg1+deg2)
x3 = x2 + L3 * np.cos(deg1+deg2+deg3)
y3 = y2 + L3 * np.sin(deg1+deg2+deg3)
いかにも再帰できそうな雰囲気ありません???
再帰させてみた
arm.py
def test(x,y,deg,L,n):
if n < len(x)-1:
x[n] = L[n]*math.cos(deg[n]) + x[n-1]
y[n] = L[n]*math.sin(deg[n]) + y[n-1]
return test(x,y,deg,L,n+1)
elif n >= len(x)-1:
x[n] = L[n]*math.cos(deg[n]) + x[n-1]
y[n] = L[n]*math.sin(deg[n]) + y[n-1]
return x,y
_x = [0]*3
_y = [0]*3
deg = [0.0,math.pi*0.5,0.0]
L = [1,1,1]
print(test(_x,_y,deg,L,0))
([1.0, 1.0, 2.0], [0.0, 1.0, 1.0])
意外と苦労したけど形になりましたとさ