如何使用matplotlib在两个点(向量)中绘制3D线?

时间:2018-09-26 13:24:51

标签: python matplotlib

我有一个简单的问题,但没有找到对我有帮助的答案。我尝试在3D中绘制带有某些直线(光线)的三角形,因为我想对光线跟踪进行一些实验。我曾经在3D中用以下代码绘制三角形:

from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Poly3DCollection, Line3DCollection
from matplotlib.patches import ConnectionPatch
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.path import Path
from matplotlib.collections import PatchCollection



#
triangle_xyA= np.array([8,6,3])
triangle_xyB= np.array([5,2,9])
triangle_xyC= np.array([4,2,10])

#
triangle_xyAp= np.array([8,6,0])
triangle_xyBp= np.array([5,2,0])
triangle_xyCp= np.array([4,2,0])

#
triangle_AB= triangle_xyB - triangle_xyA
triangle_AC= triangle_xyC - triangle_xyA
triangle_BC= triangle_xyB - triangle_xyC

#
ray_xyP = np.array([6,8])
ray_xyQ = np.array([3,3])
ray_D =  ray_xyQ - ray_xyP


fig = plt.figure()
ax = Axes3D(fig)
ax.set_xlim(0,10)
ax.set_ylim(0,10)
ax.set_zlim(0,10)



triangle_ABC = [zip(triangle_xyA,triangle_xyB,triangle_xyC)]
triangle_ABCp = [zip(triangle_xyAp,triangle_xyBp,triangle_xyCp)]

ax.add_collection3d(Poly3DCollection(triangle_ABCp))
ax.add_collection3d(Poly3DCollection(triangle_ABC))


plt.show()

,效果很好。通常,我使用 ConnectionPatches 在2d中绘制线条,如以下示例所示:

coordsA = "data"
coordsB = "data"
con = ConnectionPatch(ray_xyP, ray_xyQ, coordsA=coordsA, coordsB=coordsB,  axes = ax,arrowstyle="->", shrinkB=5)
    patches.append(con)
    ax.add_artist(con)

我更喜欢使用 ConnectionPatches ,因为可以对每个点使用[x,y]坐标,并且这些点会将这两个点连接到一条线上。但是我认为这个原理不适用于3d,因为每次都会出现一些错误。真的不像2D那样工作吗?哪个机会可以在3d中用两个给定的点画一条线而不更改我的代码?

谢谢您的建议!

0 个答案:

没有答案