矢量图形中曲面和形状的python三维可视化

2024-10-05 10:40:52 发布

您现在位置:Python中文网/ 问答频道 /正文

鉴于对原问题的评论,我想强调以下两点,这两点应适用于对这个问题的答复:

1)最终绘图应为真实的矢量图,类似于latex中的pgfplots/tikz包所产生的图形。在

2)最终绘图应该是包含多个元素的正确3D绘图,因此绘图包可能需要使用z缓冲来正确投影和渲染。在

我想用python在一个图像中可视化/绘制3D表面和几何图形。一般来说,我对三维可视化感兴趣,但现在我想做的是:我想在3D中绘制一个马鞍形状(例如,作为一个适当函数的曲面图),此外还显示一个在马鞍的某个点相切的3D球体。这可以单独使用matplotlib完成吗?还是需要使用更复杂的3D软件包,比如VTK?即使可以在matplotlib中完成,您是建议将matplotlib用于此类应用程序,还是应该使用专门为此目的而构建的程序?在

为了让您了解我只想使用python实现什么,请参见here。这是使用乳胶中的pgfplots完成的,但是正如我在那个问题中提到的,这个包有局限性。它也不是python。在

我不感兴趣的照片真实感外观或花哨的渲染。这是一个物理/数学应用程序,我希望图像有你用mplot3D或pgfplots在乳胶中得到的图形的“外观”(这样表面在外观上呈现为this)。我看过python的3D渲染包,虽然我不能真正量化原因(我认为可能是照明和光栅图形),但其中许多输出看起来更像是视频游戏而不是科学出版物(尽管这可能是为那些渲染器设计的)。在

我知道这是一个相当宽泛的问题,如果对此有异议,我很乐意重新措辞或使其更具体。然而,我相信,有一个问题的答案是有趣的,即一般的三维图形可视化是否可以而且应该使用matplotlib来完成。在


Tags: 图像应用程序图形绘图matplotlib可视化评论绘制
1条回答
网友
1楼 · 发布于 2024-10-05 10:40:52

Matplotlib和mplot3d可能无法满足您的需要,因为Matplotlib不执行三维渲染(请参见Is there something like a depth buffer in matplotlib?)。然而,VTK对于你想要做的事情来说可能太重了。在

下面是一个例子,说明如何使用visvis包:(https://github.com/almarklein/visvis

import visvis as vv
import numpy as np

# Saddle surface.
x_saddle = np.arange(-5, 5, 0.25)
y_saddle = np.arange(-5, 5, 0.25)
x_saddle, y_saddle = np.meshgrid(x_saddle, y_saddle)
z_saddle = x_saddle**2/10. - y_saddle**2/10.

# Sphere
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)

radius = 2.0
x_sphere = radius * np.outer(np.cos(u), np.sin(v))
y_sphere = radius * np.outer(np.sin(u), np.sin(v))
z_sphere = 2.0 + radius * np.outer(np.ones(np.size(u)), np.cos(v))

vv.figure()

# Plot the surfaces
vv.surf(X, Y, Z)
vv.surf(x, y, z)

app = vv.use()
app.Run()

Saddle shape and sphere rendered with visvis

请注意,您可以用Mayavi做一些非常类似的事情,但visvisvis的轴看起来更好:

^{pr2}$

Saddle shape and sphere rendered with Mayavi

相关问题 更多 >

    热门问题