numpy 用Python实现三维图形中箭状矢量箭头的解析

svmlkihl  于 2022-12-18  发布在  Python
关注(0)|答案(1)|浏览(391)

我正在尝试创建一个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()
mcvgt66p

mcvgt66p1#

每个箭头是100个箭头,我不太明白你的代码,也不明白你为什么要用for循环来一个一个地画箭头,也许这100个箭头是之前尝试不用for循环来画所有箭头的剩余部分,你确实应该这样做。
但是同时

ax.quiver(y/m,x/m, np.zeros(n), B[0], B[1], B[2], length=0.1, normalize=True, color='purple')

作者

ax.quiver(y/m,x/m, 0, B[0], B[1], B[2], length=0.1, normalize=True, color='purple')

当你在同一个地方画100次相同的箭头时,减少你得到的低质量印象。
请注意,它是确定性的。因此,它不像是箭头位置上的噪声或任何东西。简单地说,当你画一些东西时,有一个抗锯齿。这使一些像素半透明,以创建一个独立于背景的抗锯齿。但如果你画100次完全相同的箭头,使用完全相同的半透明抗锯齿像素,你会得到更二元的东西:一个像素被绘制,或者没有被绘制。2换句话说,它就像一个没有反锯齿的单箭头。
图像有1个箭头,而不是100。不容易发现这里的图像的差异,但我们可以看到,确实,有反锯齿的箭头结束在我的,而不是在你的。

相关问题