Science
Gravity
Posted July 18th, 2007 by nikko in
Description:
Simplistic planetary dynamics simulation. When I get this right I may promote it as a house project on the main Quite BASIC site,
canvas_size:
125x125
Program:
1000 REM Planetary Dynamics Simulation
1010 REM
1020 REM
1030 CLC
2000 REM Arrays holding mass, position, speed, and color
2010 ARRAY M
2020 ARRAY X
2030 ARRAY Y
2040 ARRAY U
2050 ARRAY V
2060 ARRAY C
2070 REM Gravitational constant
2080 LET G = 2
2100 REM Index 1 -- The Sun
2110 LET X[1] = 62
2120 LET Y[1] = 62
2130 LET U[1] = 0
2140 LET V[1] = 0
2150 LET M[1] = 1
2160 LET C[1] = "orange"
2200 REM Index 2 -- The Earth
2210 LET X[2] = 25
2220 LET Y[2] = 62
2230 LET U[2] = 0
2240 LET V[2] = 1.45
2250 LET M[2] = 0.01
2260 LET C[2] = "blue"
2200 REM Index 2 -- The Moon
2310 LET X[3] = 27
2320 LET Y[3] = 62
2330 LET U[3] = 0
2340 LET V[3] = 1.35
2350 LET M[3] = 0.001
2360 LET C[3] = "white"
2400 REM Number of bodies
2410 LET N = 3
3000 REM Main Dynamics loop
3010 REM
3020 REM "Unplot" all bodies
3020 FOR I = 1 TO N
3030 PLOT X[I], Y[I], "gray"
3231 REM PRINT I + ": " + X[I] +" "+ Y[I]
3040 NEXT I
3050 REM Accelerate all bodies based on pull from all other bodies
3060 FOR I = 1 TO N - 1
3070 FOR J = I+1 TO N
3080 LET D = (X[I]-X[J])*(X[I]-X[J])+(Y[I]-Y[J])*(Y[I]-Y[J])
3090 LET Q = (X[I]-X[J]) * G / D
3100 LET U[I] = U[I] - Q * M[J]
3110 LET U[J] = U[J] + Q * M[I]
3130 LET Q = (Y[I]-Y[J]) * G / D
3140 LET V[I] = V[I] - Q * M[J]
3150 LET V[J] = V[J] + Q * M[I]
3160 NEXT J
3170 NEXT I
3180 REM Move and plot all bodies
3190 FOR I = 1 TO N
3200 LET X[I] = X[I] + U[I]
3210 LET Y[I] = Y[I] + V[I]
3220 PLOT X[I], Y[I], C[I]
3231 REM PRINT I + ": " + X[I] +" "+ Y[I]
3230 NEXT I
3240 PAUSE 20
3350 GOTO 3000