ax.quiver: мне не хватает векторного поля в 3D, как мне получить красивые линии тока
У меня проблема, когда я хочу показать линии тока в 3D. Функция streamplot делает это хорошо в 2D, но не существует в 3D. Я не хочу иметь двухмерный стримплот на трехмерной фигуре, но 3D-стримплот на трехмерной фигуре. Единственное, что я нашел, это построение векторного поля с помощью ax.quiver. К сожалению, быстро становится трудно что-то увидеть:
Мой код:
width = 8.27
fac = 1.75
display = 1 # display: set to 1 to see show to figure
sve_pdf = 0 # sve_pdf: set to 1 to save as pdf
sve_png = 0 # sve_png: set to 1 to save as png
mu = 1
# importing
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as pyplot
import numpy as np
# plotting
fig = pyplot.figure(figsize=(width,width/fac))
ax = fig.gca(projection='3d')
x, y, z = np.meshgrid(np.linspace(-1., 1., 10),
np.linspace(-1., 1., 10),
np.linspace(-1., 1., 10))
u = (3./4.) * (mu / np.pi) * (x*z) / ((x**2+y**2+z**2)**5/2)
v = (3./4.) * (mu / np.pi) * (y*z) / ((x**2+y**2+z**2)**5/2)
w = - (mu / 4. * np.pi) * (1.-1.5*(z**2)*((x**2+y**2+z**2)**-2)) / ((x**2+y**2+z**2)**3/2)
u_plot = np.maximum(np.minimum(u,0.5),-0.5)
v_plot = np.maximum(np.minimum(v,0.5),-0.5)
w_plot = np.maximum(np.minimum(w,0.5),-0.5)
ax.quiver(x, y, z, u_plot, v_plot, w_plot, length = 0.5, linewidths = 0.5)
if display:
pyplot.show()
# saving
base = 'Doublet3D'
if sve_png == 1:
filename = base + '.png'
pyplot.savefig(filename, format='png', bbox_inches = 'tight', pad_inches = 0.05, dpi=600)
if sve_pdf == 1:
filename = base + '.pdf'
pyplot.savefig(filename, format='pdf', bbox_inches = 'tight', pad_inches = 0.05, dpi=600)
Есть ли способ получить обтекаемые линии в 3D? Если нет, что бы вы предложили, чтобы мы могли видеть, что происходит?