|
'
' 連続引き摺リンク.bas
' (芋ずるリンク)
'
' 平面上に配置された、アームと関節にて接続される、リンクの端を、
' 引き摺った時の様子となってると思うのですが
' 如何でしょうか、ご意見等お聞かせください
' 平面とリンク、関節共に摩擦は無いものとします
'
' H26-04-15 lark12_long
'
width=1260
height=640
set bitmap size width,height
reft=0
right=width*1.5
bottom=0
top=height*1.5
set window left,right,bottom,top
'---------------------------------------------------------------------------
xbase=100
ybase=200
n=10 'リンク関節数
rn=10 '関節の半径
dim x(n) '関節のx座標
dim y(n) '関節のx座標
dim r(n) '各アームの長さ
dim q(n) '各関節の角度
'各アームの長さ
for i=0 to n-1
r(i)=100*(rnd+0.5)
next i
'各関節の角度
for i=1 to n-1
q(i)=rad(30)
next i
'各関節の初期位置計算
px=0 '原点(0,0)
py=0
qq=0 'Σθ
for i=0 to n-1 'n個の関節
qq=qq+q(i)
x(i)=px+r(i)*cos(qq) 'x=l1*cos(q1)+l2*cos(q1+q2)+l3*cos(q1+q2+q3)+....
y(i)=py+r(i)*sin(qq) 'y=l1*sin(q1)+l2*sin(q1+q2)+l3*sin(q1+q2+q3)+...
px=x(i) 'px更新
py=y(i) 'py更新
next i
'繰り返し計算
do
call cal 'リンクの動作シミュレーション計算
call draw '状態描画
loop
'---------------------------------------------------------------------------
'リンクの動作シミュレーション計算
sub cal
'端点の移動
mouse poll xm,ym,left,right
x(n-1)=xm-xbase
y(n-1)=ym-ybase
if right=1 then stop 'マウス右クリックで停止
'連続アームの移動
for i=1 to n-1
l=sqr( (x(i)-x(i-1) )^2+(y(i)-y(i-1) )^2 ) '関節間アームの現在長さ
cosc=(x(i)-x(i-1) )/l '現在のアームとx軸との余弦値
sinc=(y(i)-y(i-1) )/l '現在のアームとy軸との正弦値
x(i-1)=x(i)-r(i-1)*cosc 'x(i-1)をx(i)と真のアーム長さr(i-1)と余弦値を使って算出
y(i-1)=y(i)-r(i-1)*sinc 'y(i-1)をy(i)と真のアーム長さr(i-1)と正弦値を使って算出
next i
end sub
'---------------------------------------------------------------------------
'動作描画
sub draw
set draw mode hidden
set line width 4
line(0,0)-(2000,960),1,bf '画面クリヤ
'アーム、関節表示更新
for i=0 to n-2
line(x(i)+xbase,y(i)+ybase)-(x(i+1)+xbase,y(i+1)+ybase),4
circle (x(i)+xbase,y(i)+ybase),10,4,,,,f
next i
'移動端点の表示更新
circle (x(n-1)+xbase,y(n-1)+ybase),10,5,,,,f
set draw mode explicit
end sub
'---------------------------------------------------------------------------
|
|