【问题标题】:Good geometry library in python? [closed]python中好的几何库? [关闭]
【发布时间】:2009-07-02 21:30:00
【问题描述】:

我正在寻找一个良好且开发良好的库,用于在 python 中进行几何操作和评估,例如:

  • 在 2D 和 3D 中评估两条线之间的交点(如果存在)
  • 评估平面和线之间的交点,或两个平面之间的交线
  • 计算线和点之间的最小距离
  • 求通过一点的平面的正交
  • 旋转、平移、镜像一组点
  • 找到由四个点定义的二面角

我有一本关于所有这些操作的纲要书,我可以实现它,但不幸的是我没有时间,所以我会喜欢一个可以实现它的库。大多数操作对于游戏目的都很有用,因此我确信其中一些功能可以在游戏库中找到,但我不希望包含我不需要的功能(例如图形)。

有什么建议吗?谢谢

【问题讨论】:

  • 如果您只使用 2D 没问题,那么您可以查看this

标签: python geometry


【解决方案1】:

也许看看SymPy

【讨论】:

  • 它并不能真正满足我的要求,但它确实是一个很酷的项目,所以我接受你的回答作为对未来的一个有趣的建议(因为 SymPy 有一个几何模块,以及大量的开发人员)
  • 2d 很遗憾。不是真正的建设性几何引擎。
  • SymPy 的几何模块也可能非常非常慢。由于它是为进行符号数学而设计的,因此它更喜欢使用精确表达式而不是近似浮点值。考虑到几何计算中通常涉及的平方根的数量,您可以想象这些表达式是如何变得非常大而且非常慢的。
  • 更新到 SymPy 现在也包含 3D 库
  • 感谢您的回答。我现在正在试用 SymPy。第一个实验执行起来似乎很慢——即使对于一个简单的 2D 对象也是如此。知道它是否适合实时处理几何图形吗?谢谢。
【解决方案2】:

Shapely 是流行的GEOS 库的一个不错的python 包装器。

【讨论】:

  • 似乎非常专注于 GIS 数据处理,而不是纯粹的“数理几何”(可以这么说)
  • 它当然是为 GIS 社区使用而创建的,但是它故意不了解地理投影,这使其可以用作通用欧几里得几何库。我在一个新兴的电脑游戏项目中大量使用它,而且效果很好。
  • 关于 3D 几何的说法:“第三个 z 坐标值可以在构造实例时使用,但对几何分析没有影响。所有操作都在 x-y 平面中执行。”
  • 上面的评论花了我大约半个小时的编码才找到。真的很激动。
  • 当问题特别要求 3D 时,为什么只有一票反对?
【解决方案3】:

我发现pyeuclid 是一个很棒的简单通用欧几里得数学包。尽管该库可能不完全包含您提到的问题,但它的基础架构足以让您轻松编写这些问题。

【讨论】:

    【解决方案4】:

    【讨论】:

    • 上一个版本是 2009 年,它们似乎不完整。谁能说他们最近使用过它们,并且可以使用绑定完成问题中提出的事情?
    • 是的,我发现的所有绑定都不完整,包括一些真正的好东西,例如构造立体几何。此外,CGAL 的高度模板化特性使其难以很好地包装。在我自己的一个项目 (Demakein) 中,我使用 cffi 模块和一些可怕的黑客直接从 python 使用 CGAL,使用内联 C++ sn-ps。
    【解决方案5】:

    我真的很想对这个问题有一个好的答案,而上面的那些让我不满意。但是,我刚刚遇到pythonocc,它看起来很棒,除了缺少好的文档并且在安装时仍然遇到一些问题(还不兼容 pypi)。最后一次更新是 4 天前(2011 年 6 月 19 日)。它包装了OpenCascade,它具有大量的几何和建模功能。来自pythonocc网站:

    pythonOCC 是 Python 编程语言的 3D CAD/CAE/PLM 开发框架。它提供高级拓扑和几何操作、数据交换(STEP、IGES、STL 导入/导出)、2D 和 3D 网格划分、刚体模拟、参数化建模等功能。

    [编辑:我现在已经下载了 pythonocc 并开始研究一些示例]

    我相信它可以执行所有提到的任务,但我发现它使用起来不直观。它几乎完全由 SWIG 包装器创建,因此,命令的自省变得困难。

    【讨论】:

    • 在我看来,它做的太多了......我们应该开始一个吗?我很快将需要在我的光线追踪器中进行许多几何操作,为它创建一个单独的 github 可能是有意义的。我已经有一些代码,我们不会从头开始,但是如果我们发现它不够好,重新设计会很容易。
    • @Stefano Borini:当然!我很乐意尽我所能提供帮助,但我离你的资格水平还差得很远。
    • 我同样对可用的内容感到失望。对于简单的东西,我已经完成了我自己的代码(例如在Adolphus 中),但是今晚,例如,我需要多面体-多面体相交,而这距离我必须保持理智的步骤太多了。无论如何,如果这继续下去,请把我算在内。
    • 这个项目诞生了吗?
    • @Mermoz 是的,但是非常缓慢。 Stefano 已经开始使用图书馆,我一直在编写自己的补充,但我们还没有走多远。见github.com/stefanoborini/python-geometrygithub.com/bengolder/python-geometry
    【解决方案6】:

    geometry-simple 有大约 300 行的 Point Line Plane Movement 类,仅使用 numpy;看看吧。

    【讨论】:

      【解决方案7】:

      您可能对 OpenOpt 项目中的 Python 模块 SpaceFuncs 感兴趣,http://openopt.org

      SpaceFuncs 是用于 2D、3D、N 维几何建模的工具,具有参数化计算、数值优化和几何方程求解系统的可能性

      【讨论】:

        【解决方案8】:

        Python Wild Magic 是另一个 SWIG 包装代码。然而,它是一个游戏库,但您可以操作 SWIG 库文件以从 Python API 中排除任何不需要的图形内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-22
          • 2016-12-02
          • 1970-01-01
          • 1970-01-01
          • 2010-12-26
          • 1970-01-01
          • 1970-01-01
          • 2012-12-27
          相关资源
          最近更新 更多