我正在尝试创建一个3D图显示场线通过一个表面,可以使用Python倾斜。对于场线,我希望创建他们的基础上,场向量,显示使用箭。图中的箭头似乎是非常低的分辨率,如何改善这方面的建议?任何帮助将不胜感激!
enter image description here
这是我的代码;
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
angle = 0 #
b_y = np.cos(angle*np.pi/180) #
b_z = np.sin(angle*np.pi/180) #
l = np.array([1,0,0]) #
b = np.array([0,b_y,b_z]) #
A = np.cross(l,b) #
l_ = np.linalg.norm(l) #
b_ = np.linalg.norm(b) #
A_ = np.linalg.norm(A) #r
# Plot
plt.figure(1)
ax = plt.axes(projection="3d")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
ax.set_zlim(0, 1)
# Surface
n = 100
x_l =np.linspace(0,b[1], n)
y_b = np.linspace(0,1, n)
z_z = np.linspace(0,b[2],n)
xx, yy = np.meshgrid(x_l, y_b)
zz = (xx+yy)/(xx+yy) + z_z -1
ax.plot_surface(xx, yy, zz, alpha=0.5)
B = np.array([0,0,1]) # Field vector
flux = np.dot(A,B) # Flux
m = 4
# Plot field lines
for x in range(0,m+1):
for y in range(0,m+1):
#ax.plot3D([x*b_/m,x*b_/m],[y*l_/m,y*l_/m],[0,1], color='purple')
ax.quiver(y/m,x/m, np.zeros(n), B[0], B[1], B[2], length=0.1, normalize=True, color='purple')
plt.savefig('3Dplot1.png',dpi=300)
plt.show()
1条答案
按热度按时间mcvgt66p1#
每个箭头是100个箭头,我不太明白你的代码,也不明白你为什么要用for循环来一个一个地画箭头,也许这100个箭头是之前尝试不用for循环来画所有箭头的剩余部分,你确实应该这样做。
但是同时
作者
当你在同一个地方画100次相同的箭头时,减少你得到的低质量印象。
请注意,它是确定性的。因此,它不像是箭头位置上的噪声或任何东西。简单地说,当你画一些东西时,有一个抗锯齿。这使一些像素半透明,以创建一个独立于背景的抗锯齿。但如果你画100次完全相同的箭头,使用完全相同的半透明抗锯齿像素,你会得到更二元的东西:一个像素被绘制,或者没有被绘制。2换句话说,它就像一个没有反锯齿的单箭头。
图像有1个箭头,而不是100。不容易发现这里的图像的差异,但我们可以看到,确实,有反锯齿的箭头结束在我的,而不是在你的。