Przestrzenie i Metryki¶
Próby zrozumienia, przedstawienia i usystematyzowania zagadnienia.
import sympy as sp
from IPython.display import display, Markdown
m = """
## Metryka eklidesowa
<br>Prosta "normalna" przestrzeń zdefiniowana $ds^2=dx^2+dy^2+dz^2$
<br>przez tensor metryczny $ds^2=\delta_{ij} dx^i dx^j$ gdzie $\delta_{ij}$ to delta Kroneckiego jedynkowa
"""
display(Markdown(m))
a_x, a_y, a_z = sp.symbols('a_x a_z a_z')
b_x, b_y, b_z = sp.symbols('b_x b_y b_z')
a_s = sp.Matrix([a_x,a_y,a_z])
b_s = sp.Matrix([b_x,b_y,b_z])
a_n = a_s.subs([(a_x, 0), (a_y, 0), (a_z, 0)])
b_n = b_s.subs([(b_x, 1), (b_y, 1), (b_z, 1)])
u_s = b_s - a_s
u = b_n - a_n
g = sp.eye(3) # jedynkowa
ds2_s = u_s.T * g * u_s
ds2 = u.T * g * u
ds = sp.sqrt(ds2[0])
# Kod LaTeX do wyświetlenia w Jupyter Notebook
#def LatexPrze(text=''):
# global latex_code
latex_code = fr"""
\begin{{array}}{{c}}
\Huge \text{{Współrzędne punktów przestrzeni}}
\\ \\ \Large A={sp.latex(a_s)}={sp.latex(a_n)}; B={sp.latex(b_s)}={sp.latex(b_n)}
\\ \\ \Huge \text{{Różnice współrzędnych przestrzeni}}
\\ \\ \Large u=B-A={sp.latex(u_s)}={sp.latex(u)}
\\ \\ \Huge \text{{Tensor metryczny przestrzeni}}
\\ \\ \Large g={sp.latex(g)}
\\ \\ \Huge \textbf{{Odległość w przestrzeni}}
\\ \\ \Large ds^2=u^T*g*u={sp.latex(ds2_s)}={sp.latex(ds2)}; \; ds={sp.latex(ds)}
\end{{array}}
"""
display(Markdown(latex_code))
# return latex_code
#LatexPrze()
#l = LatexPrze()
# Wyświetlenie w Jupyter Notebook
#display(Markdown(latex_code))
Metryka eklidesowa¶
Prosta "normalna" przestrzeń zdefiniowana $ds^2=dx^2+dy^2+dz^2$
przez tensor metryczny $ds^2=\delta_{ij} dx^i dx^j$ gdzie $\delta_{ij}$ to delta Kroneckiego jedynkowa
\begin{array}{c} \Huge \text{Współrzędne punktów przestrzeni} \\ \\ \Large A=\left[\begin{matrix}a_{x}\\a_{z}\\a_{z}\end{matrix}\right]=\left[\begin{matrix}0\\0\\0\end{matrix}\right]; B=\left[\begin{matrix}b_{x}\\b_{y}\\b_{z}\end{matrix}\right]=\left[\begin{matrix}1\\1\\1\end{matrix}\right] \\ \\ \Huge \text{Różnice współrzędnych przestrzeni} \\ \\ \Large u=B-A=\left[\begin{matrix}- a_{x} + b_{x}\\- a_{z} + b_{y}\\- a_{z} + b_{z}\end{matrix}\right]=\left[\begin{matrix}1\\1\\1\end{matrix}\right] \\ \\ \Huge \text{Tensor metryczny przestrzeni} \\ \\ \Large g=\left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{matrix}\right] \\ \\ \Huge \textbf{Odległość w przestrzeni} \\ \\ \Large ds^2=u^T*g*u=\left[\begin{matrix}\left(- a_{x} + b_{x}\right)^{2} + \left(- a_{z} + b_{y}\right)^{2} + \left(- a_{z} + b_{z}\right)^{2}\end{matrix}\right]=\left[\begin{matrix}3\end{matrix}\right]; \; ds=\sqrt{3} \end{array}
import sympy as sp
from IPython.display import display, Markdown
from sympy.physics.units import speed_of_light, meter, second
from sympy.physics.units import convert_to
m = """
## Metryka Minkowskiego (czasoprzestrzeń płaska w STW)
<br>zdefiniowana $ds^2=-c^2dt+dx^2+dy^2+dz^2$
<br>przez tensor metryczny $ds^2=\delta_{ij} dx^i dx^j$ gdzie $\delta_{ij}$ to tensor metryczny Minkowskiego
- $ds^2<0$ interwał czasowy $\Delta r = \\frac{\sqrt{-ds^2}}{c}$ czas własny, zdarzenie wewnątrz stożka, związek przyczynowy
- $ds^2>0$ interwał przestrzenny $\Delta l = \sqrt{ds^2}$, zdarzenie na zewnątrz stożka, brak związku przyczynowego
- $ds^2=0$ interwał zerowy, na powierzchni stożka, Światło.
STW - szczególna teoria względności
"""
display(Markdown(m))
c =3*10**8 #300 tys km na sek
a_t, a_x, a_y, a_z = sp.symbols('a_t a_x a_y a_z')
b_t, b_x, b_y, b_z = sp.symbols('b_t b_x b_y b_z')
c_s = sp.symbols('c')
sv = [(a_t, 0), (a_x, 0), (a_y, 0), (a_z, 0),
(b_t, 1), (b_x, c/2), (b_y, 0), (b_z, 0),
(c_s, c)
]
#c = convert_to(speed_of_light, [meter, second])
#c = convert_to(speed_of_light, [])
#c = speed_of_light
a_s = sp.Matrix([a_t, a_x, a_y, a_z])
b_s = sp.Matrix([b_t, b_x, b_y, b_z])
a_n = a_s.subs(sv)
b_n = b_s.subs(sv)
u_s = b_s - a_s
u_s[0,0] = u_s[0,0]*c_s
u_n = b_n - a_n
u_n[0,0]=u_n[0,0]*c
g = sp.eye(4) # jedynkowa
g[0,0] = -1
ds2_s = u_s.T * g * u_s
ds2_n = ds2_s.subs(sv)
#print(f'{ds2_s=}')
#print(f'{ds2_n=}')
#print(f'{sv=}')
ds2_nn = ds2_n[0].evalf()
#print(f'{ds2_nn=}')
# Kod LaTeX do wyświetlenia w Jupyter Notebook
if (ds2_nn < 0):
dr = (-ds2_nn)**0.5 / c
text = f'ds^2<0; \; \\text{{Interwał czasowy}}; \Delta r= \dfrac{{\sqrt{{-ds^2}}}}{{c}}= {dr}s'
if (ds2_nn > 0):
ds = (ds2_nn)**0.5
tekst = f'ds^2<0; \;Przestrzenny \; interwał \;; ds={ds}m'
latex_code = fr"""
\begin{{array}}{{c}}
\Huge \text{{Współrzędne punktów przestrzeni}}
\\ \\ \Large A={sp.latex(a_s)}={sp.latex(a_n)}; B={sp.latex(b_s)}={sp.latex(b_n)}
\\ \\ \Huge \text{{Różnice współrzędnych przestrzeni}}
\\ \\ \Large u=B-A={sp.latex(u_s)}={sp.latex(u_n)}
\\ \\ \Huge \text{{Tensor metryczny przestrzeni}}
\\ \\ \Large g={sp.latex(g)}
\\ \\ \Huge \textbf{{Odległość w przestrzeni}}
\\ \\ \Large ds^2=u^T*g*u={sp.latex(ds2_s)}=
\\ \\ \Large ={sp.latex(ds2_n)}={sp.latex(ds2_nn)}
\\ \\ \Large {text}
\end{{array}}
"""
# Wyświetlenie w Jupyter Notebook
display(Markdown(latex_code))
Metryka Minkowskiego (czasoprzestrzeń płaska w STW)¶
zdefiniowana $ds^2=-c^2dt+dx^2+dy^2+dz^2$
przez tensor metryczny $ds^2=\delta_{ij} dx^i dx^j$ gdzie $\delta_{ij}$ to tensor metryczny Minkowskiego
- $ds^2<0$ interwał czasowy $\Delta r = \frac{\sqrt{-ds^2}}{c}$ czas własny, zdarzenie wewnątrz stożka, związek przyczynowy
- $ds^2>0$ interwał przestrzenny $\Delta l = \sqrt{ds^2}$, zdarzenie na zewnątrz stożka, brak związku przyczynowego
- $ds^2=0$ interwał zerowy, na powierzchni stożka, Światło. STW - szczególna teoria względności
\begin{array}{c} \Huge \text{Współrzędne punktów przestrzeni} \\ \\ \Large A=\left[\begin{matrix}a_{t}\\a_{x}\\a_{y}\\a_{z}\end{matrix}\right]=\left[\begin{matrix}0\\0\\0\\0\end{matrix}\right]; B=\left[\begin{matrix}b_{t}\\b_{x}\\b_{y}\\b_{z}\end{matrix}\right]=\left[\begin{matrix}1\\150000000.0\\0\\0\end{matrix}\right] \\ \\ \Huge \text{Różnice współrzędnych przestrzeni} \\ \\ \Large u=B-A=\left[\begin{matrix}c \left(- a_{t} + b_{t}\right)\\- a_{x} + b_{x}\\- a_{y} + b_{y}\\- a_{z} + b_{z}\end{matrix}\right]=\left[\begin{matrix}300000000\\150000000.0\\0\\0\end{matrix}\right] \\ \\ \Huge \text{Tensor metryczny przestrzeni} \\ \\ \Large g=\left[\begin{matrix}-1 & 0 & 0 & 0\\0 & 1 & 0 & 0\\0 & 0 & 1 & 0\\0 & 0 & 0 & 1\end{matrix}\right] \\ \\ \Huge \textbf{Odległość w przestrzeni} \\ \\ \Large ds^2=u^T*g*u=\left[\begin{matrix}- c^{2} \left(- a_{t} + b_{t}\right)^{2} + \left(- a_{x} + b_{x}\right)^{2} + \left(- a_{y} + b_{y}\right)^{2} + \left(- a_{z} + b_{z}\right)^{2}\end{matrix}\right]= \\ \\ \Large =\left[\begin{matrix}-6.75 \cdot 10^{16}\end{matrix}\right]=-6.75 \cdot 10^{16} \\ \\ \Large ds^2<0; \; \text{Interwał czasowy}; \Delta r= \dfrac{\sqrt{-ds^2}}{c}= 0.866025403784439s \end{array}
from sympy import symbols, sin, Matrix, simplify, pi
m = """
# Metryka OTW na przykładzie metryki Schwarzschilda (czarna dziura, nierotująca masa sferyczna)
### w trakcie opanowywania
OTW - ogólna teoria względności
"""
display(Markdown(m))
# Stałe fizyczne i współrzędne
G, M, c = symbols('G M c') # Stałe fizyczne
t, r, theta, phi = symbols('t r theta phi') # Współrzędne czasoprzestrzeni
dt, dr, dtheta, dphi = symbols(r'dt dr d\theta d\phi') # Zmienne różniczkowe
# Promień Schwarzschilda
r_s = 2 * G * M / c**2
# Definicja macierzy metrycznej g_mu_nu
g = Matrix([
[-(1 - r_s / r), 0, 0, 0],
[0, 1 / (1 - r_s / r), 0, 0],
[0, 0, r**2, 0],
[0, 0, 0, r**2 * sin(theta)**2]
])
# Wektor różnic współrzędnych dx^mu
dx = Matrix([c * dt, dr, r * dtheta, r * sin(theta) * dphi])
# Obliczanie interwału czasoprzestrzennego ds^2 = dx^T * g * dx
ds_squared = simplify(dx.transpose() * g * dx)
values = {
r: 10 * r_s,
theta: pi / 2,
dt: 1,
dr: 1,
dtheta: 0,
dphi: 0
}
# Obliczenie ds^2 dla zadanych wartości
ds_value = ds_squared.subs(values)
v = ds_value.evalf()
latex_code = fr"""
\begin{{array}}{{c}}
\\ \Large ds^2={sp.latex(ds2)}
\\ \\ \Large = {sp.latex(ds_value)} = {sp.latex(v)}
\end{{array}}
"""
display(Markdown(latex_code))
\begin{array}{c} \\ \Large ds^2=\left[\begin{matrix}3\end{matrix}\right] \\ \\ \Large = \left[\begin{matrix}- \frac{c^{2} \cdot \left(324 G^{2} M^{2} - \frac{400 G^{2} M^{2}}{c^{2}}\right)}{360 G^{2} M^{2}}\end{matrix}\right] = \left[\begin{matrix}- \frac{0.00277777777777778 c^{2} \cdot \left(324.0 G^{2} M^{2} - \frac{400.0 G^{2} M^{2}}{c^{2}}\right)}{G^{2} M^{2}}\end{matrix}\right] \end{array}
Próby interaktywnej grafiki przestrzennej¶
Próby i testy narzedzie do graficznego przedstawiania różnych aspektów wizualizacji przestrzeni
import plotly as pl
import plotly.graph_objects as go
import numpy as np
pl.io.renderers.default = "notebook_connected" # musi być jeżeli chcemy do html-a
# Przykładowe dane dla odcinka
x = [0, 10]
y = [0, 5]
z = [0, 2]
# Tworzenie wykresu 3D odcinka
fig = go.Figure()
fig.add_trace(go.Scatter3d(
x=x,
y=y,
z=z,
mode='lines',
line=dict(color='blue', width=3)
))
x = [0, 10]
y = [0, 5]
z = [0, 3]
fig.add_trace(go.Scatter3d(
x=x,
y=y,
z=z,
mode='lines',
line=dict(color='red', width=3)
))
fig.add_trace(go.Cone(
x=[1], y=[1], z=[1],
u=[1], v=[0], w=[0],
sizemode="scaled",
sizeref=1,
anchor="tip",
colorscale='Reds',
name='Gradient'
))
# Ustawienia osi
fig.update_layout(
scene=dict(
xaxis_title='Oś X',
yaxis_title='Oś Y',
zaxis_title='Oś Z'
),
title='Wykres 3D odcinka z Plotly'
)
fig.show()