Ejemplo n.º 1
0
"""
如果度量张量是投影,那并矢是什么?


绘制度一个向量的笛卡尔坐标、斜角坐标以及对偶坐标

再次声明,对偶坐标,逆变、协变分量,这些概念,只是借用一下而已。
不完全认同,而且这些概念本身可能有错误。
"""
from numpy import *
from matplotlib.pyplot import *

from common.oblique_coord import ObliqueCoord
from common.orthogonalcoord import OrthogonalCoord

ax = OrthogonalCoord(-3, 7, show_grid=False)

# python有精度损失。
g1 = array([0.5, 2])
g2 = array([1.7, 0.3])

co_coord = ObliqueCoord(ax, g1, g2, "red")
dual_coord = co_coord.get_dual_coord("blue")
co_coord.draw_basis()
dual_coord.draw_basis()

v_c = array([2, 3])
v_o = co_coord.to_oblique_components(v_c)
v_d = dual_coord.to_oblique_components(v_c)

ax.draw_vector(v_c, True)
Ejemplo n.º 2
0
"""
绘制度一个向量的笛卡尔坐标、斜角坐标以及对偶坐标

再次声明,对偶坐标,逆变、协变分量,这些概念,只是借用一下而已。
不完全认同,而且这些概念本身可能有错误。
"""
from numpy import *
from matplotlib.pyplot import *

from common.oblique_coord import ObliqueCoord
from common.orthogonalcoord import OrthogonalCoord

ax = OrthogonalCoord(-3, 7)
# python有精度损失。
g1 = array([0.8, 0.3])
g2 = array([0.1, 1.1])

co_coord = ObliqueCoord(ax, g1, g2, "red")
dual_coord = co_coord.get_dual_coord("blue")
co_coord.draw_basis()
dual_coord.draw_basis()

v_c = array([2, 3])
v_o = co_coord.to_oblique_components(v_c)
v_d = dual_coord.to_oblique_components(v_c)

ax.draw_vector(v_c, True)
co_coord.draw_oblique_components(v_c)
dual_coord.draw_oblique_components(v_c)

wm = get_current_fig_manager()
Ejemplo n.º 3
0
from numpy import *
from common.orthogonalcoord import OrthogonalCoord
from common.oblique_coord import ObliqueCoord
import matplotlib.pyplot as plt

'''
验证笛卡尔坐标、逆变坐标、协变坐标、度量张量之间的关系
还不认可逆变、协变坐标和对偶坐标系的概念
'''
max    = 5
lspace = 50

ax = OrthogonalCoord(-1, max)
# python有精度损失。
v = 0.5
gamma = 1/sqrt(1-v**2)
# 为什么这里是v而不是洛伦兹变换矩阵里面的-v? 因为这是逆变换?
g1 = array([1, v])*gamma
g2 = array([v, 1])*gamma
co_coord = ObliqueCoord(ax, g1, g2, "red")
co_coord.draw_basis()
co_coord.draw_vector([1, 1], draw_components=True)
ax.draw_vector(co_coord.to_cartesian_components([1, 1]), with_components=True)
# co_coord.draw_oblique_components()
# co_coord.draw_oblique_components()

# 绘制双曲线
# xlist = linspace(-2, max, lspace)
# ylist = linspace(-2, max, lspace)
# X, Y = meshgrid(xlist, ylist)
#
Ejemplo n.º 4
0
from numpy import *
from common.orthogonalcoord import OrthogonalCoord
from common.oblique_coord import ObliqueCoord
import matplotlib.pyplot as plt

'''
验证笛卡尔坐标、逆变坐标、协变坐标、度量张量之间的关系
还不认可逆变、协变坐标和对偶坐标系的概念
'''
max = 5
lspace = 50

ax = OrthogonalCoord(-1, max)
# python有精度损失。
v = 0.8
gamma = 1/sqrt(1-v**2)
# 为什么这里是v而不是洛伦兹变换矩阵里面的-v? 因为这是逆变换?
g1 = array([1, v])*gamma
g2 = array([v, 1])*gamma
co_coord = ObliqueCoord(ax, g1, g2, "red")
co_coord.draw_basis()
co_coord.draw_vector([1, 1], draw_components=True)
# co_coord.draw_oblique_components()

# 绘制双曲线
xlist = linspace(-2, max, lspace)
ylist = linspace(-2, max, lspace)
X, Y = meshgrid(xlist, ylist)

F = X**2 - Y**2 - 1
plt.contour(X, Y, F, [0], colors='b', linestyles='dashed', linewidths=1)
Ejemplo n.º 5
0
from matplotlib.pyplot import show
from numpy import *

from common.orthogonalcoord import OrthogonalCoord
from common.common import get_column_from_matrix
from common.oblique_coord import ObliqueCoord
'''
验证笛卡尔坐标、逆变坐标、协变坐标、度量张量之间的关系
还不认可逆变、协变坐标和对偶坐标系的概念
'''
ax = OrthogonalCoord(-1, 15)
# python有精度损失。

# M的读数是M.T这个坐标系的。不能直接绘制。
M = mat([[2, 0.5], [1.5, 2]])

MT = M.T
# 将M的两个基向量的读数转换成笛卡尔读数
M1 = MT @ M
print(M1)
# 现在可以绘制了。已经是笛卡尔读数。注意绘制的并不是M.T,
# 真正的两个基向量还是在M里面表示的,只是他的读数是基于M.T的。M.T又有自己的基向量
ax.draw_vector(get_column_from_matrix(M1, 0), color="red")
ax.draw_vector(get_column_from_matrix(M1, 1), color="red")

ax.draw_vector(get_column_from_matrix(MT, 0), color="green")
ax.draw_vector(get_column_from_matrix(MT, 1), color="green")

# 如果一直M中的一个向量,读数是[1,1], 这个向量的笛卡尔读数是多少?
v = [1, 1]
v_c = M1 @ v
Ejemplo n.º 6
0
import matplotlib.pyplot as plt
# from common.oblique_coord import ObliqueCoord
# from common.cartesian import Cartesian
from numpy import *

from common.orthogonalcoord import OrthogonalCoord
from common.oblique_coord import ObliqueCoord

cartesian = OrthogonalCoord(-2, 6)
# 用numpy的array而非python原生array,来方便做向量与标量的乘法,否则很麻烦
# 协变坐标系
g1 = array([0.6, 0.2])
g2 = array([0.2, 1.7])
co_coord = ObliqueCoord(cartesian, g1, g2, "red")

# 逆变坐标系
contra_coord = co_coord.get_dual_coord(color="blue")
# contra_coord.to_cartesian_components([1, 1])

co_coord.draw_basis()
contra_coord.draw_basis()

# 显示向量以及它在不同坐标系下面的分量
cartesian_vector = array([4, 3])
v1 = co_coord.to_oblique_components(cartesian_vector)
v2 = contra_coord.to_oblique_components(cartesian_vector)
print("笛卡尔读数", cartesian_vector)
print("斜角读数", v1)
print("对偶读数", v2)
print("斜角和对偶点乘", v1 @ v2)
Ejemplo n.º 7
0
from numpy import *

from common.orthogonalcoord import OrthogonalCoord
from common.oblique_coord import ObliqueCoord

# from common.cartesian import Cartesian
# from common.oblique_coord import ObliqueCoord
'''
验证笛卡尔坐标、逆变坐标、协变坐标、度量张量之间的关系
还不认可逆变、协变坐标和对偶坐标系的概念
'''
ax = OrthogonalCoord(-3, 7)
# python有精度损失。
g1 = array([0.8, 0.3])
g2 = array([0.1, 1.1])
co_coord = ObliqueCoord(ax, g1, g2, "red")
contra_coord = co_coord.get_dual_coord("blue")

g = co_coord.G
gt = co_coord.G.T
gd = co_coord.G_dual
gi = co_coord.G_inverse
m = co_coord.metrics_tensor

v_c = array([2, 3])
v_o = co_coord.to_oblique_components(v_c)
v_d = contra_coord.to_oblique_components(v_c)

print("G", g)
print("G.I", gi)
print("G.dual", gd)