Spel27: Multi-Pendel

triplependulum                 Se hur en trippel-pendel kan kontrolleras till upprättstående

Vi programmerar dynamiken hos en pendel med många massor kopplade med fjädrar och styr med fjäderlängd, fjäderstyvhet, dämpning och gravitation. Försök kontrollera till upprättstående läge med 1 och 2 massor.

Template: (Titta på dynamiken)

— Multi Pendel

function setup()

print(“Pendel med många länkar”)
print(“Styrning genom längd L, fjäderstyvhet E, dämpning D och gravitation G.”)
print(“Touch to start”)

I=8
parameter.number(“L”,1,200,20)
parameter.number(“E”,1,1000,100)
parameter.number(“G”,1,100000,10000)
parameter.number(“D”,1,100,10)

x={}
xold={}
xm={}
v={}
vold={}
vm={}
a={}
f={}
F={}
mass={}
dt=0.001

for i=1,I do
x[i]=vec2(0,100+i*L)
xold[i]=vec2(0,100+i*L)
xm[i]=vec2(0,100*i*L)
v[i]=vec2(0,0)
vold[i]=vec2(0,0)
vm[i]=vec2(0,0)
f[i]=vec2(0,0)
F[i]={}
a[i]=vec2(0,0)
mass[i]=1
end

for i=1,I do
for j=1,I do
F[i][j]=0
end
end

for i=1,I-1 do
F[i][i+1]=1
F[i+1][i]=1
end

end

function draw()
background(40, 40, 50)

for i=1,I do
fill(255, 0, 40, 255)
ellipse(x[i].x,x[i].y,40)
stroke(0, 255, 2, 255)
strokeWidth(5)
if i<I then
line(x[i].x,x[i].y,x[i+1].x,x[i+1].y)
end
end

x[1]=vec2(CurrentTouch.x,CurrentTouch.y)
xm[1]= x[1]
xold[1]= x[1]

for p=1,4 do
for i=1,I do
f[i]=vec2(0,-G)
for j=1,I do
xm[i]=(x[i]+xold[i])/2
vm[i]=(v[i]+vold[i])/2
length=(xm[i]-xm[j]):len()
f[i]=f[i]-F[i][j]*E*(length-L)*(xm[i]-xm[j])
a[i]=f[i]/mass[i]
v[i]=(1-0.001*D)*vold[i]+a[i]*dt
x[i]=xold[i]+vm[i]*dt
end
end
end
for i=1,I do
xold[i]=x[i]
vold [i]=v[i]
end
end

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s