Spel18: Kollison

30

Vi programmerar kollision mellan kroppar via repulsiva fjädrar som aktiveras mellan två kroppar då avståndet mellan kropparna är tillräckligt litet. Vi begränsar kropparnas rörelse till en kvadrat via reflektion på kvadratens rand.

Förslag: Programmera ett biljardspel.

Template 1: (Titta på kollisioner och reflektioner)

— Kollision mellan kroppar förmedlade av repulsiva fjädrar

function setup()
print(“Kollison via repulsiv fjäder”)
print(“Touch för att skapa kroppar med random hastighet”)
links = {}
linkvels = {}
dt = 0.01
F=10
end

function draw()

background(236, 235, 236, 255)

for i,link in pairs(links) do
force=vec2(0,0)
for j,link in pairs(links) do
dist = (links[j]-links[i]):len()
if dist < 50 then
force = force – (links[j]-links[i])*F
end
end
linkvels[i]=linkvels[i]+force*dt
links[i]=links[i]+linkvels[i]*dt
fill(0, 77, 255, 255)
strokeWidth(0)
ellipse(links[i].x,links[i].y,30)
end

for k,linkvel in pairs(linkvels) do
if links[k].x < 60 then
linkvels[k].x = – linkvels[k].x
end
if links[k].x > 440 then
linkvels[k].x = – linkvels[k].x
end
if links[k].y < 210 then
linkvels[k].y = – linkvels[k].y
end
if links[k].y > 590 then
linkvels[k].y = – linkvels[k].y
end
end

stroke(32, 244, 42, 255)
strokeWidth(10)
line(50,200,450,200)
line(450,200,450,600)
line(50,600,450,600)
line(50,200,50,600)

end

function touched(touch)
if touch.state == BEGAN then
N=N+1
table.insert(links, makeLink(touch.x,touch.y))
table.insert(linkvels, makeLinkVel())
end
end

function makeLink(x,y)
local link=vec2()
link.x = x
link.y = y
return link
end

function makeLinkVel()
local linkvel=vec2(math.random(-200,200),math.random(-200,200))
return linkvel
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