Spel24: Elastisk Kropp

gjmky

crash-dummies

Vi programmerar rörelsen/dynamiken av en elastisk kropp som ett system av massor kopplade med elastiska något dämpade fjädrar (som stötdämpare på en bil eller mountain bike). Vi anger massornas utgångspositionen genom att klicka på skärmen och beräknar därefter  fjädrarnas utgångslängd motsvarande fjäderkraften = 0. Vi kan sedan studera kroppens rörelse och deformation medan vi varierar gravitation, fjäderkonstant och dämpning via parametrar. Jämför med Elastic Body på App Store.

Template 1: (Studera rörelsen)

— Elastisk kropp

function setup()
print(“Klicka för att ange geometri av elastisk kropp som ett system av mass or kopplade med elastiska fjädrar med dämpning. Gravitation, fjäderkonstant och dämpning kan styras via parametrar.”)
x = {}
xm = {}
xold={}
v= {}
vold={}
vm= {}
dt = 0.02
M=5
dist = 1
length = {}
force=vec2(0,0)
for i=1,M do
length[i]={}
x[i]=vec2(200,500)
xm[i]=vec2(0,0)
xold[i]=vec2(0,0)
v[i]=vec2(0,0)
vm[i]=vec2(0,0)
vold[i]=vec2(0,0)
end

for i=1,M do
for j=1,M do
length[i][j]=1
end
end

parameter.number(“G”,-10000,10000,0)
parameter.number(“F”,0,1000,0)
parameter.number(“D”,1,100,10)
parameter.number(“B”,0,100,0)
end

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

for i=1,M do
xold[i]=x[i]
vold[i]=v[i]
for p=1,4 do
xm[i]=(xold[i]+x[i])/2
vm[i]=(vold[i]+v[i])/2
force=vec2(0,-G)
if x[i].y<200 then
v[i].y=-1.2*v[i].y
end

for j=1,M do
dist=(xm[j]-xm[i]):len()
d=dist-length[i][j]
force = force + d*(xm[j]-xm[i])*F/(dist +1)
end
v[i]=(1-0.01*D)*vold[i]+force*dt
x[i]=xold[i]+vm[i]*dt
end

fill(255, 42, 0, 255)
strokeWidth(0)
ellipse(x[i].x,x[i].y,50)
if n==5 then
stroke(200, 255, 0, 255)
strokeWidth(5)
for j=1,M do
line(x[j].x,x[j].y,x[i].x,x[i].y)
end
end
end
end

n=0

function touched(touch)
if touch.state == ENDED then
n=n+1
x[n]=vec2(touch.x,touch.y)
for i=1,n do
for j=1,n do
length[i][j]=(x[i]-x[j]):len()
end
end
if n==5 then
F=200
end
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