Potenciál gravitačního pole dvou hmotných bodů¶
Vykreslení průběhu potenciálu dvou hmotných bodů ležících v rovině $xy$
Potenciál bude vykreslen také v rovině $xy$.
In [2]:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm #barevné schéma pro vykreslení 2D plochy potenciálu
Funkce popisující potenciál hmotného gravitačního pole hmotného bodu a hmotnosti $m$ v bodu o souřadnicích $[x_0,y_0]$ $$\phi(x,y) = -G \frac{m}{r},$$ kde $$r = \sqrt{(x-x_0)^2+(y-y_0)^2}$$
In [4]:
def potencial(x,y,m,x0,y0):
G = 6.67430e-11
r=np.sqrt((x-x0)**2+(y-y0)**2)
return -G*m/r
- první hmotný bod má hmotnost $m_1$ a nachází se v bodu o souřadnicích $[x_1,y_1]$
- druhý hmotný bod má hmotnost $m_2$ a nachází se v bodu o souřadnicích $[x_2,y_2]$
In [6]:
#první hmotný bod
m1 = 2e10
x1 = 0
y1 = 0
#druhý hmotný bod
m2 = 1e10
x2 = 1
y2 = 0.25
Vytvoříme v rovině $xy$ síť a vypočítáme hodnotu potenciálu v každém uzlu této sítě
In [8]:
#rozmezí v rovině xy, kde budeme potenciál počítat
xmin = -1.5
xmax = 1.5
ymin = -1.5
ymax = 1.5
N = 1000 #na kolik čístí rozdělíme osu x a y, 2D mřížka bude mít rozměr N x N
x = np.linspace(xmin,xmax,N)
y = np.linspace(xmin,xmax,N)
xmesh,ymesh = np.meshgrid(x,y) #vytvoří 2D mřížku, x-ové souřadnice jsou v poli xmesh, y-ové v poli ymesh
Teď vypočítáme potenciál v každém bodě mřížky
In [10]:
zmesh = potencial(xmesh,ymesh,m1,x1,y1) + potencial(xmesh,ymesh,m2,x2,y2) #využíváme princip superpozice
Vykreslíme potenciál v rovině $xy$
In [12]:
fig,ax = plt.subplots(subplot_kw={"projection":"3d"}) #projekce 3D grafu
ax.plot_surface(xmesh,ymesh,zmesh,cmap=cm.nipy_spectral) #vykreslí plochu odpovídající průběhu potenciálu
ax.set_zlim(-25,0)
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("potenciál")
plt.show()
Přidáme třetí hmotný bod o hmotnosti $m_3$ do místa o souřadnicích $[x_3,y_3]$
In [14]:
m3 = 0.5e10
x3 = -0.5
y3 = -0.6
Updatujeme potenciál v rovině $xy$
In [16]:
zmesh = zmesh + potencial(xmesh,ymesh,m3,x3,y3)
a nakreslíme graf
In [18]:
fig,ax = plt.subplots(subplot_kw={"projection":"3d"}) #projekce 3D grafu
ax.plot_surface(xmesh,ymesh,zmesh,cmap=cm.nipy_spectral) #vykreslí plochu odpovídající průběhu potenciálu
ax.set_zlim(-25,0)
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("potenciál")
plt.show()