Python的3D数学库

20

我正在寻找一款Python或带有Python绑定的3D数学库。

它需要处理旋转、平移、透视投影等所有基本操作。

但是,我不需要针对屏幕绘图的库。经过几个小时的谷歌搜索,我发现大多数3D库都是为了渲染屏幕而设计的。我不需要任何可视化效果,只需要能够向库中输入x、y、z坐标并接收到x、y屏幕坐标即可。

如果是可视化库也没关系,只要可以在不渲染屏幕的情况下使用即可。

有没有类似于这样的Python库?

编辑: 请不要推荐Scipy / Numpy,因为它们并不专注于3D数学,而是在数学领域通用。如果我想自己构建库,那么它们看起来是很好的工具,但我不想这么做。谢谢。


1
你能澄清一下你想要什么吗?你所要求的转换可以通过矩阵乘法来完成,而numpy是一个很自然的选择。你希望在不看到任何矩阵的情况下进行3D工作吗? - John La Rooy
1
Python对于处理字符串有很好的支持,但这是否意味着每个人都应该自己编写XML解析库?Numpy适用于一般数学计算,但我不能只输入(x,y,z)坐标并让它呈现2D(x,y)坐标,我需要使用Numpy来编写自己的3D数学引擎吗?寻找一个处理像3D几何这样常见问题的库有什么问题呢? - spearfire
9个回答

5

这不是一个“开源计算机视觉”库吗?它不是一个3D数学库吗? - Ivan Nevostruev
2
我相信任何更具体的库都将更适合于“旋转、平移、透视投影,基本上所有的东西”。如果你只需要绘制矩形并旋转它,那么这里与计算机视觉无关。 - Ivan Nevostruev
OpenCV 可以处理 OP 所述的需求。如果对于 OP 来说过于复杂,我也推荐使用 SciPy。 - Jacob
1
+1 为什么要踩?OpenCV似乎能够完成OP所需的所有操作。 - Andre Miller
谢谢,这就是为什么我认为在投反对票时需要评论,否则对于发布答案的人来说就没有任何反馈。 - Jacob
显示剩余3条评论

5

transformations.py

这是一个库,用于计算4x4矩阵,以进行平移、旋转、反射、缩放、剪切、投影、正交化和数组的超定位坐标的叠加,同时也包括旋转矩阵、欧拉角和四元数之间的转换。此外还包括一个Arcball控制对象和分解变换矩阵的函数。

作者: Christoph Gohlke http://www.lfd.uci.edu/~gohlke/ University of California, Irvine的荧光动力学实验室


4
尝试使用 gameobjects -- 这是一个包含矩阵和向量的Python类以及转换方法的数学库。我认为它将提供您所需的大部分(如果不是全部),而且它是纯Python,因此您可以根据需要进行修改。

你赢得了互联网!谢谢。 - spearfire

2

python-math3d是另一个优秀的面向对象的3D数学库 https://github.com/mortlind/pymath3d

导入math3d作为m3d

v = m3d.Vector(1,2,3) # 一个向量对象

o = m3d.Orientation.new_euler((1,0,0), "ZYX") # 一个从一种类型的欧拉角创建的方向对象

t = m3d.Transform(o, v) # 使用向量和方向创建一个变换对象

t2 = m3d.Transform()# 另一个变换对象(单位矩阵)

t2.orient.rotate_x(3) # 围绕x轴旋转变换

res = t * t2 # 矩阵乘法


是的,这正是我所需要的,非常感谢您发布答案。 - lowtech

2

感谢您的推荐,不过 Sage 看起来对我来说更像是 Numpy/Scipy。我已经仔细阅读了其文档、看了一些示例,但它并不针对三维数学,而是针对一般数学。再次感谢您的建议。 - spearfire

2

我正在开发一个项目。 https://github.com/adamlwgriffiths/Pyrr

它使用numpy来提高速度。 目标是提供一个纯Python 3D数学库。

我避免使用外部库,因为我厌倦了跟随复杂的软件安装。Python应该是易于使用的。


1

关于PyGame怎么样?我从未使用过它,但它可能包含你正在寻找的内容。


1.) Pygame是2D的。 2.) Pygame试图绘制到屏幕上,这不是我想要的。 3.) Pygame不是一个数学库,而是一个SDL包装器。 4.) 不,Pygame没有我要找的东西。无论如何还是谢谢。 - spearfire
2
@spearfire:如果你点击我给出的链接,你会得到一个使用PyGame的3D程序页面。也许有些程序可以满足你的需求?我只是想通过提供一个想法来帮助你! - Eric O. Lebigot
我想补充一点,pyeuclid与PyGame兼容,并且似乎非常接近您想要的东西。 - Eric O. Lebigot
刚刚查看了pyeuclid,非常完美。感谢你的帮助,pyeuclid似乎正是我想要的,而不是pygame/pyopengl。再次感谢。 - spearfire
1
@spearfire pygame支持3D支持。您不需要使用它来绘制屏幕。您可以直接使用pygame.math模块进行数学计算,而无需任何可视化。Pygame的pygame.math部分确实是一个数学库,而不是SDL包装器。虽然它不支持投影,但它很干净,并支持旋转和平移(通过重载的+运算符),以及其他功能。 - dionyziz

1

我建议使用MayaVi。请查看给定的链接。它几乎可以完成你提到的所有功能。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接