forked from jlgw/julia-scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
orbit.jl
51 lines (44 loc) · 1.43 KB
/
orbit.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using CanvasWebIO, WebIO, Observables, Mux
global running = true
gf = 2500000.0
t = 0.02
iv = [80.0, 0.0]
chart = Canvas([800,800],true)
sun = dom"svg:circle[id=sun,
cx=400.0,
cy=400.0,
r=50]"(style=Dict(:fill=>"yellow"))
planet1 = dom"svg:circle[id=planet1,
cx=400.0,
cy=100.0,
r=7]"(style=Dict(:fill=>"blue"))
planet2 = dom"svg:circle[id=planet2,
cx=450.0,
cy=100.0,
r=7]"(style=Dict(:fill=>"green"))
velocity1 = Observable(chart.w, "velocity1", iv)
velocity2 = Observable(chart.w, "velocity2", iv)
addmovable!(chart, sun)
addmovable!(chart, planet1)
addmovable!(chart, planet2)
@async while running
sleep(t)
distv1 = chart["planet1"][]-chart["sun"][]
nrm1 = norm(distv1)
dir1 = distv1/nrm1
distv2 = chart["planet2"][]-chart["sun"][]
nrm2 = norm(distv2)
dir2 = distv2/nrm2
velocity1[] = velocity1[] - dir1*gf/(nrm1^2)*t
velocity2[] = velocity2[] - dir2*gf/(nrm2^2)*t
chart["planet1"] = chart["planet1"][] + t*velocity1[]
chart["planet2"] = chart["planet2"][] + t*velocity2[]
end
function responder(req)
@async (chart["planet1"] = [400.0,100.0])
@async (chart["planet2"] = [450.0,100.0])
@async (velocity1[] = iv)
@async (velocity2[] = iv)
chart()
end
webio_serve(page("/", responder))