如何在python中繪製三維圖形?在3d中繪製Python
我想繪製軌道軌跡。 Plotting Orbital Trajectories
從上面的鏈接,我能夠得到設置功能的幫助。但我不知道如何在3D中進行繪圖。
運行時,它不會生成正確的軌跡。
切換np.linspace
到np.arnage
會導致內存錯誤,我在一臺運行Xubuntu的64位系統上運行16 GB Ram。
所以我嘗試轉換距離單位和時間單位,但有些不正確。也許我的數學或別的東西。
我讓149.6 * 10 ** 6 = 1 DU
。一個TU被定義爲mu = DU ** 3/TU ** 2
所以1TU = 2241.15
和DU/TU = 66751.4
使用這些轉換,我有:我也嘗試使用x2,y2,z2
來看看是否會工作。
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
from numpy import linspace
from mpl_toolkits.mplot3d import Axes3D
mu = 1
# r0 = [-149.6 * 10 ** 6, 0.0, 0.0] # Initial position
# v0 = [29.9652, -5.04769, 0.0] # Initial velocity
u0 = [-1, 0.0, 0.0, 0.000448907, -0.0000756192, 0.0]
def deriv(u, dt):
n = -mu/np.sqrt(u[0] ** 2 + u[1] ** 2 + u[2] ** 2)
return [u[3], # dotu[0] = u[3]'
u[4], # dotu[1] = u[4]'
u[5], # dotu[2] = u[5]'
u[0] * n, # dotu[3] = u[0] * n
u[1] * n, # dotu[4] = u[1] * n
u[2] * n] # dotu[5] = u[2] * n
dt = np.arange(0.0, 20, .0001) # Time to run code in seconds'
u = odeint(deriv, u0, dt)
x, y, z, x2, y2, z2 = u.T
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(x2, y2, z2)
plt.show()
但這個情節是不正確的。它應該是一個保持相同軌跡的橢圓。
#!/usr/bin/env python
# This program solves the 3 Body Problem numerically and plots the
# trajectories
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
from numpy import linspace
from mpl_toolkits.mplot3d import Axes3D
mu = 132712000000.0
# r0 = [-149.6 * 10 ** 6, 0.0, 0.0] # Initial position
# v0 = [29.9652, -5.04769, 0.0] # Initial velocity
u0 = [-149.6 * 10 ** 6, 0.0, 0.0, 29.9652, -5.04769, 0.0]
def deriv(u, dt):
n = -mu/np.sqrt(u[0] ** 2 + u[1] ** 2 + u[2] ** 2)
return [u[3], # dotu[0] = u[3]'
u[4], # dotu[1] = u[4]'
u[5], # dotu[2] = u[5]'
u[0] * n, # dotu[3] = u[0] * n
u[1] * n, # dotu[4] = u[1] * n
u[2] * n] # dotu[5] = u[2] * n
dt = np.linspace(0.0, 86400 * 700, 5000) # Time to run code in seconds'
u = odeint(deriv, u0, dt)
x, y, z, x2, y2, z2 = u.T
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(x, y, z)
plt.show()
到底是什麼問題? http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html – sashkello
@sashkello我只用了一個星期的Python,所以我不熟悉如何做到這一點。 – dustin
我給了你明確解釋如何去做的鏈接。在詢問之前自己嘗試一下,配對:) – sashkello