Spel21: Atomer

kDDG4

Vi programmerar en atom-modell i form av ett mass-fjädersystem med en positivt laddad kärna som attraherar en svärm negativt laddade elektroner (via attraherande fjäder), vilka repellerar varandra (via repellerande fjädrar). Elektronerna är organiserade i elektronskal av växande radie och kärnans laddning Z kan styras med en parameter. Elektronerna i de olika elektronskalen startas från ett stört tillstånd och datorprogrammet simulerar dynamiken mot ett grundtillstånd. Jämför med Atoms på App Store.

Template 1: (Följ dynamiken)

— Mass-fjäder modell av atom med positiv kärna och negativa elektroner.
N=20
x={}
xm={}
xold={}
v={}
a={}
f={}
k={}
M=4

for i=1,N do
x[i]={}
xm[i]={}
xold[i]={}
v[i]={}
f[i]={}
k[i]={}
a[i]={}
end

for i=1,N do
for m=1,M do
x[i][m]=vec2(200+m*100*math.cos(2*math.pi*i/N),300+m*100*math.sin(2*math.pi*i/N))
xold[i][m]=vec2(200+m*100*math.cos(2*math.pi*i/N),300+m*100*math.sin(2*math.pi*i/N))
xm[i][m]=vec2(200+m*100*math.cos(2*math.pi*i/N),300+m*100*math.sin(2*math.pi*i/N))
v[i][m]=vec2(0,0)
f[i][m]=vec2(0,0)
k[i][m]=vec2(0,0)
a[i][m]=vec2(0,0)
end
end

length=0
dt=0.01
function setup()
print(“Modell av atom som mass-fjäder system med elektroner i olika elektronskal av växande radie kring en kärna, vars ladding kan styras med parametern Z. Atomen finner sitt jämviktstillstånd efter störning vid start.”)
parameter.number(“Z”,10,100,50)
end

function draw()
background(248, 248, 249, 255)
for m=1,M do
for i=2,N-1 do
length=(xm[i][m]-xm[i-1][m]):len()
length=length/100
f[i][m]=-(2*xm[i][m]-xm[i+1][m]-xm[i-1][m])/length^2
end
f[1][m]=-(2*xm[1][m]-xm[2][m]-xm[N][m])/length^2
f[N][m]=-(2*xm[N][m]-xm[1][m]-xm[N-1][m])/length^2
for i=1,N do
for n=1,4 do
length=(vec2(200,300)-xm[i][m]):len()
length=length/100
k[i][m]=Z*(vec2(200,300)-xm[i][m])*(length-m*20/Z)/(length^4)
a[i][m]=f[i][m]+k[i][m]
if m==1 then
v[i][m]=0.99*v[i][m]+a[i][m]*dt
else
v[i][m]=v[i][m]+a[i][m]*dt
end
x[i][m]=xold[i][m]+v[i][m]*dt
xm[i][m]=(x[i][m]+xold[i][m])*0.5
end
xold[i][m]=x[i][m]
end
end

for m=1,M do
for i=1,N do
strokeWidth(0)
if m==1 then
fill(0, 11, 255, 255)
end
if m==2 then
fill(255, 0, 37, 255)
end
if m==3 then
fill(9, 255, 0, 255)
end
if m==4 then
fill(255, 0, 246, 255)
end
if m==5 then
fill(254, 255, 0, 255)
end
ellipse(x[i][m].x,x[i][m].y,m*15)
fill(2, 2, 2, 255)
ellipse(200,300,20)
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