Due stelle e asteroide

G = 6.7\cdot 10^{-11}
\displaystyle \vec{a} = -\frac{G \ m_1}{r_1^2}(\vec{r_1})-\frac{G \ m_2}{r_2^2}(\vec{r_2})
from vpython import *

G = 6.7e-11

stella_1  = sphere(pos = vector(-5e11, 0, 0), radius = 2e10, color = color.orange)
stella_2  = sphere(pos = vector(+5e11, 0, 0), radius = 1e10, color = color.yellow)

asteroide = sphere(pos = vector(1.5e12, 0, 0), radius = 1e10, color = color.cyan, make_trail=True)
asteroide.v = vector(0, -7.5e3, 0)

stella_1.massa  = 3e30
stella_2.massa  = 1e30
asteroide.massa = 1e22

stella_1.p = stella_1.massa*vector(0,  3e3, 0)
stella_2.p = stella_2.massa*vector(0, -9e3, 0)

dt = 1e5
while(True):
    rate(200)

    r = stella_1.pos - stella_2.pos
    F = (G*stella_1.massa*stella_2.massa/mag2(r))*r.hat

    r1 = asteroide.pos - stella_1.pos
    r2 = asteroide.pos - stella_2.pos
    a  = -G*stella_1.massa/mag2(r1)*r1.hat - G*stella_2.massa/mag2(r2)*r2.hat
    
    if(mag(r1) < 2e9) or (mag(r2) < 2e9):
        print("Collisione")
        break
    elif(mag(r1) < 8e9) or (mag(r2) < 8e9):
        dt = 4e3 
        print("Molto vicino")
    else:
        dt = 1e5
    
    stella_1.p += -F*dt
    stella_2.p += +F*dt

    stella_1.pos  += stella_1.p/stella_1.massa*dt
    stella_2.pos  += stella_2.p/stella_2.massa*dt

    asteroide.v   += a*dt
    asteroide.pos += asteroide.v*dt

Lascia un commento