我有一个简单的问题,但没有找到对我有帮助的答案。我尝试在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中用两个给定的点画一条线而不更改我的代码?
谢谢您的建议!