Python 中的简单 3D 图形
Simple 3D Graphics in Python
我在一个项目中工作,其中 3D 可视化对于查看设置阶段发生的事情很重要,并且可能通过制作有关正在发生的事情的短视频进行视觉验证。
我遇到的问题是 Python 中的 3D 可视化效果过于复杂,无法满足我的需要。我发现 Mathematica 是一种完美的软件...但它不可移植且非常昂贵。
问题
有没有类似 Mathematica 的 Python 包?
澄清
我不想要 "plotting" 程序,因为绘图不是我要找的。我想生成简单的几何形状,比如可以四处移动的球体和立方体,这已经足够了。提供一些坐标,也许是旋转,程序只显示所需的图像以导出为 .png 或制作快速视频;就像在 Mathematica 中一样。
Pygame、Panda3D、Pyglet 等软件包,看起来太复杂了,对我需要的东西来说太过分了,还有 Blender 等软件。Jupyter notebooks 类似,但它们没有 3D 图形功能.我找到了一个名为 Fresnel 的 Python 模块,但它看起来太复杂了,无法满足我的需要。
我已经在 Stack Overflow 中阅读了这个问题的几个答案,但它们似乎已经过时,并不是我真正想要的。
进一步说明
要在 Mathematica 中绘制球体,您需要:
coordinates = Flatten[Table[Table[Table[ {i,j,k}, {k,1,10}], {j,1,10}], {i,1,10}],1]
spheres= Flatten[Table[Graphics3D[{Sphere[coordinates[[i]],0.5]}],{i,1,Length[coordinates]}]]
Show[{spheres}]
这是显示一组球体的简单快捷方式。要使用 Python 中的任何程序来做同样的事情,看来您必须是 3D 图形方面的专家才能做这个简单的事情。
能够使用 Python 脚本的程序,如 Blender,很难以直接的方式使用界面(尝试在 Blender 中做同样的事情,学习它需要一段时间基础知识!)。
除了 matplotlib,我还知道其他几个用户友好的绘图库,但提供交互式视图的并不多。当然有众所周知的 vtk 但它不适用于最终用户
阴谋
要在笔记本中使用,例如 jupyter 和 mathematica,您可能会选择 plotly 它使用基于浏览器的界面,其绘图与 mathematica 非常相似
pymadcad
如果您需要更离线的版本,并且您正在寻找的是一些视图,您可以rotate/zoom/pan从不同的侧面查看您的几何图形,您可以查看 pymadcad
它甚至适用于触摸屏。
它不以 3D 可视化为中心,因此仅将它用于它有点大材小用,但是对于您所说的 3D 曲线、3D 曲面、球体和立方体,它可以胜任
使用 pymadcad 的简单绘图:
from madcad import *
from madcad.rendering import Displayable
from madcad.displays import GridDisplay
# create a wire from custom points
s = 100
mycurve = Wire([ vec3(sin(t/s), cos(t/s), 0.1*t/s)
for t in range(int(s*6*pi)) ])
# create a sphere
mysphere = uvsphere(vec3(0), 0.5)
# display in a separated window
show([
mycurve, # displaying the curve
mysphere, # displaying the sphere
Displayable(GridDisplay, vec3(0)), # this is to have a 2D grid centered on origin
])
结果:
(window 是深色的,因为我的系统主题也是如此,但它可能会适应你的)
我在一个项目中工作,其中 3D 可视化对于查看设置阶段发生的事情很重要,并且可能通过制作有关正在发生的事情的短视频进行视觉验证。
我遇到的问题是 Python 中的 3D 可视化效果过于复杂,无法满足我的需要。我发现 Mathematica 是一种完美的软件...但它不可移植且非常昂贵。
问题
有没有类似 Mathematica 的 Python 包?澄清
我不想要 "plotting" 程序,因为绘图不是我要找的。我想生成简单的几何形状,比如可以四处移动的球体和立方体,这已经足够了。提供一些坐标,也许是旋转,程序只显示所需的图像以导出为 .png 或制作快速视频;就像在 Mathematica 中一样。Pygame、Panda3D、Pyglet 等软件包,看起来太复杂了,对我需要的东西来说太过分了,还有 Blender 等软件。Jupyter notebooks 类似,但它们没有 3D 图形功能.我找到了一个名为 Fresnel 的 Python 模块,但它看起来太复杂了,无法满足我的需要。
我已经在 Stack Overflow 中阅读了这个问题的几个答案,但它们似乎已经过时,并不是我真正想要的。
进一步说明
要在 Mathematica 中绘制球体,您需要:coordinates = Flatten[Table[Table[Table[ {i,j,k}, {k,1,10}], {j,1,10}], {i,1,10}],1]
spheres= Flatten[Table[Graphics3D[{Sphere[coordinates[[i]],0.5]}],{i,1,Length[coordinates]}]]
Show[{spheres}]
这是显示一组球体的简单快捷方式。要使用 Python 中的任何程序来做同样的事情,看来您必须是 3D 图形方面的专家才能做这个简单的事情。
能够使用 Python 脚本的程序,如 Blender,很难以直接的方式使用界面(尝试在 Blender 中做同样的事情,学习它需要一段时间基础知识!)。
除了 matplotlib,我还知道其他几个用户友好的绘图库,但提供交互式视图的并不多。当然有众所周知的 vtk 但它不适用于最终用户
阴谋
要在笔记本中使用,例如 jupyter 和 mathematica,您可能会选择 plotly 它使用基于浏览器的界面,其绘图与 mathematica 非常相似
pymadcad
如果您需要更离线的版本,并且您正在寻找的是一些视图,您可以rotate/zoom/pan从不同的侧面查看您的几何图形,您可以查看 pymadcad 它甚至适用于触摸屏。 它不以 3D 可视化为中心,因此仅将它用于它有点大材小用,但是对于您所说的 3D 曲线、3D 曲面、球体和立方体,它可以胜任
使用 pymadcad 的简单绘图:
from madcad import *
from madcad.rendering import Displayable
from madcad.displays import GridDisplay
# create a wire from custom points
s = 100
mycurve = Wire([ vec3(sin(t/s), cos(t/s), 0.1*t/s)
for t in range(int(s*6*pi)) ])
# create a sphere
mysphere = uvsphere(vec3(0), 0.5)
# display in a separated window
show([
mycurve, # displaying the curve
mysphere, # displaying the sphere
Displayable(GridDisplay, vec3(0)), # this is to have a 2D grid centered on origin
])
结果: