Python 在2D中打印3D多边形

Python 在2D中打印3D多边形,python,matplotlib,3d,2d,delaunay,Python,Matplotlib,3d,2d,Delaunay,我一直在为此寻找正确的实现方法 我有一个3D delaunay三角剖分,想在2D中绘制。 在3D中,我设法做到这一点: 不过我需要一个二维图。使用matplotlib.tripcolor方法或matplotlib.collections.PolyCollection得到的结果是: 如何在2D中绘制此图,而不将顶部和后部三角形全部混淆?到目前为止尝试的所有方法中,一些三角形被应位于结构后面的三角形隐藏 我明白了,这些方法没有按照正确的顺序绘制所需的信息,因为我已经提供了2D数组。深度信息丢失

我一直在为此寻找正确的实现方法

我有一个3D delaunay三角剖分,想在2D中绘制。 在3D中,我设法做到这一点:

不过我需要一个二维图。使用matplotlib.tripcolor方法或matplotlib.collections.PolyCollection得到的结果是:

如何在2D中绘制此图,而不将顶部和后部三角形全部混淆?到目前为止尝试的所有方法中,一些三角形被应位于结构后面的三角形隐藏

我明白了,这些方法没有按照正确的顺序绘制所需的信息,因为我已经提供了2D数组。深度信息丢失

有人知道怎么做吗?
非常感谢

通过设置正交投影、初始化视图以面向所需平面,以及沿与所选视图平面正交的轴删除不需要的打印元素,可以使用
Axes3d
模拟二维打印。此外,可以使用关键字参数打印二维元素

下面是我修改后演示的matplotlib 3D绘图示例之一

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np

# Enable orthographic projection
# https://stackoverflow.com/questions/23840756/how-to-disable-perspective-in-mplot3d
from mpl_toolkits.mplot3d import proj3d
def orthogonal_proj(zfront, zback):
    a = (zfront+zback)/(zfront-zback)
    b = -2*(zfront*zback)/(zfront-zback)
    return np.array([[1,0,0,0],
                        [0,1,0,0],
                        [0,0,a,b],
                        [0,0,-0.000001,zback]])
proj3d.persp_transformation = orthogonal_proj

fig = plt.figure()
ax = fig.gca(projection='3d')

# Init view to YZ plane
ax.view_init(azim=0, elev=0)

# Hide the X axis
ax.w_xaxis.line.set_lw(0.)
ax.set_xticks([])

# Change YZ plane colour to white
ax.w_xaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))

# Make data.
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

# Plot the surface.
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)
ax.set_zlim(-1.1, 1.1)
ax.set_ylabel('y')
ax.set_zlabel('z')

# Plot 2D elements with zdir argument
# https://stackoverflow.com/questions/29549905/pylab-3d-scatter-plots-with-2d-projections-of-plotted-data
stepsize = 0.1
t = np.arange(-4, 4+stepsize, step=stepsize)
ax.plot(t, 0.5*np.sin(t), 'k', zdir='x', linewidth=1.0)
ax.text(0, 0, 1, 'Text', zdir='y', ha='center', va='top')

plt.show()

也许其中的一个答案会满足你的需求,而不是完全满足你的需求。在上图中已正确设置了角度。问题是,我想在上面的2D中绘制其他东西。所以我真的希望2DMatplotlib本身不是一个3D引擎。因此,渲染是错误的。您只能将tripcolor与前面的三角形一起使用。但这可能意味着您需要检查哪些三角形的顶点大于某个点,并绘制所有其他三角形。这可能更好,也可能更糟,这取决于您的体积的“形状”,但假设没有适当的逐像素深度检查。如果形状太复杂,您可能需要构建自己的小型渲染算法(可能使用imshow或类似的算法)。我担心会这样!这就是我问的原因。在这样做之前,通常有一个更好的解决方案,一个人从来没有遇到过。但也许你是对的,谢谢。我会调查的。