H2+
# from math import * # from visual import * # from visual.graph import * from vpython import * # import vpython scene.fullscreen = True G = 100 # edit initial conditions here ########## spheres = [ sphere(pos=vector(0,0,0),radius =.1,color=color.blue,charge=-1,mass=1,velocity=vector(0,-5,0),a = vector(0,0,0)), sphere(pos=vector(1,0,-1),radius=.3,color=color.red,charge=1,mass=7200,velocity=vector(.1,0,0),a=vector(0,0,0)), #sphere(pos=vector(0,12,0),radius=.08,color=color.green,mass=sqrt(4),velocity=vector(1.2,0,0.6),a=vector(0,0,0),trail=curve(color=color.green)), sphere(pos=vector(-1,0,1),radius=.3,color=color.red,charge=1,mass=7200,velocity=vector(-.1,0,0),a=vector(0,0,0)) #sphere(pos=vector(0,28,0),radius=.4,color=color.orange,mass=sqrt(80),velocity=vector(0.7,0,0.4),a=vector(0,0,0),trail=curve(color=color.orange)), #sphere(pos=vector(0,32,0),radius=0.2,color=color.white,mass=-sqrt(10),velocity=vector(1.5,0,0.4),a=vector(0,0,0),trail=curve(color=color.white)) ] #print(spheres[0].a) #print(len(spheres)) def acceleration1on2(sphere2,sphere1): r = sphere2.pos - sphere1.pos r_mag = mag(r) normal_r = norm(r) g = ((G*sphere1.charge*sphere2.charge)/pow(r_mag,2))/sphere2.mass*normal_r #print(g) return g t = 0 dt = .01 while 1: rate(1000) for i in spheres: i.a = vector(0,0,0) soi = vector(0,0,0) for j in spheres: if i!=j: i.a = i.a + acceleration1on2(i,j) for i in spheres: #print(i.velocity) i.velocity = i.velocity + i.a *dt i.pos = i.pos+i.velocity*dt #print(i.a) #scene.center=vector(spheres[0].pos.x,spheres[0].pos.y,spheres[0].pos.z) # print(i.a)
Delayed Newton Force (DNF)
runs in python 3 after
pip3 install vpython
# from math import * # from visual import * # from visual.graph import * from vpython import * # import vpython scene.fullscreen = True G = 10 c = 100 spheres = [ sphere(pos=vector(0,0,0),radius =6,color=color.red,charge=1000,mass=7200,velocity=vector(0,0,0),a = vector(0,0,0),trail=curve(color=color.red,ratain=1000)), sphere(pos=vector(0,100,-1),radius=2,color=color.blue,charge=-1,mass=1,velocity=vector(10,0,0),a=vector(0,0,0),trail=curve(color=color.blue,retain=1000)), #sphere(pos=vector(0,12,0),radius=.08,color=color.green,mass=sqrt(4),velocity=vector(1.2,0,0.6),a=vector(0,0,0),trail=curve(color=color.green)), sphere(pos=vector(0,100,1),radius=2,color=color.white,charge=-1,mass=1,velocity=vector(-10,0,0),a=vector(0,0,0),trail=curve(color=color.white, retain=1000)), #sphere(pos=vector(0,28,0),radius=.4,color=color.orange,mass=sqrt(80),velocity=vector(0.7,0,0.4),a=vector(0,0,0),trail=curve(color=color.orange)), #sphere(pos=vector(0,32,0),radius=0.2,color=color.white,mass=-sqrt(10),velocity=vector(1.5,0,0.4),a=vector(0,0,0),trail=curve(color=color.white)) ] #print(spheres[0].a) #print(len(spheres)) # undelayed flying start def acceleration1on2(sphere2,sphere1): r = sphere2.pos - sphere1.pos return ((G*sphere1.charge*sphere2.charge)/pow(mag(r),2))/sphere2.mass*norm(r) t = 0 dt = .01 for index in range(1,1001): rate(2500) for i in spheres: i.a = vector(0,0,0) for j in spheres: if i!=j: i.a = i.a + acceleration1on2(i,j) for i in spheres: i.velocity = i.velocity + i.a *dt i.pos = i.pos+i.velocity*dt i.trail.append(pos=i.pos) def acceleration1on2(sphere2,sphere1): npoints= sphere1.trail.npoints should_be_zero = 100000000 should_be_zero_previous = 10000000000000 for n in range(npoints): r = sphere2.pos - sphere1.trail.point(npoints-n-1)["pos"] r_mag = mag(r) should_be_zero = abs( r_mag - c*n*dt ) if ( should_be_zero > should_be_zero_previous ): normal_r = norm(r) break should_be_zero_previous = should_be_zero return ( (G*sphere1.charge*sphere2.charge) /pow(r_mag,2) ) /sphere2.mass * normal_r while 1: rate(250) for i in spheres: i.a = vector(0,0,0) for j in spheres: if i!=j: i.a = i.a + acceleration1on2(i,j) for i in spheres: i.velocity = i.velocity + i.a *dt i.pos = i.pos+i.velocity*dt i.trail.append(pos=i.pos)
Alternative Static Front Page
minimalist web publishing
with just a text file in the apache web directory:
The result of the previous post should look something like this:
3D Charge Simulator
Paste the code at the end of this post here:
https://www.beautifulmathuncensored.de/static/GlowScript/GlowScript.html
And press “Run”.
Edit “pos” (position), “velocity”, “charge” and “mass” parameters to simulate a different set of charged particles.
Add a sphere with all the parameters (followed by a “,”) to add an additional charged particle to the simulation.
I hope people will play around and have fun!
(If you have questions, you can ask in the comments.)
Code:
# from math import * # from visual import * # from visual.graph import * from vpython import * # import vpython scene.fullscreen = True G = 10 # edit initial conditions here ########## spheres = [ sphere(pos=vector(0,0,0),radius =6,color=color.red,charge=1000,mass=7200,velocity=vector(0,0,0),a = vector(0,0,0),trail=curve(color=color.red)), sphere(pos=vector(0,100,-1),radius=2,color=color.blue,charge=-1,mass=1,velocity=vector(10,0,0),a=vector(0,0,0),trail=curve(color=color.blue)), #sphere(pos=vector(0,12,0),radius=.08,color=color.green,mass=sqrt(4),velocity=vector(1.2,0,0.6),a=vector(0,0,0),trail=curve(color=color.green)), sphere(pos=vector(0,100,1),radius=2,color=color.white,charge=-1,mass=1,velocity=vector(-10,0,0),a=vector(0,0,0),trail=curve(color=color.white)), #sphere(pos=vector(0,28,0),radius=.4,color=color.orange,mass=sqrt(80),velocity=vector(0.7,0,0.4),a=vector(0,0,0),trail=curve(color=color.orange)), #sphere(pos=vector(0,32,0),radius=0.2,color=color.white,mass=-sqrt(10),velocity=vector(1.5,0,0.4),a=vector(0,0,0),trail=curve(color=color.white)) ] #print(spheres[0].a) #print(len(spheres)) def acceleration1on2(sphere2,sphere1): r = sphere2.pos - sphere1.pos r_mag = mag(r) normal_r = norm(r) g = ((G*sphere1.charge*sphere2.charge)/pow(r_mag,2))/sphere2.mass*normal_r #print(g) return g t = 0 dt = .01 while 1: rate(100) for i in spheres: i.a = vector(0,0,0) soi = vector(0,0,0) for j in spheres: if i!=j: i.a = i.a + acceleration1on2(i,j) for i in spheres: #print(i.velocity) i.velocity = i.velocity + i.a *dt i.pos = i.pos+i.velocity*dt #print(i.a) i.trail.append(pos=i.pos) scene.center=vector(spheres[0].pos.x,spheres[0].pos.y,spheres[0].pos.z) # print(i.a)
New number set
Def.: |H is the set of all nested hyperoperation and inverse-hyperoperation expressions with the natural numbers (without 0) as base arguments.