跳转到主要内容

贝塞尔曲线、三角形和更高阶对象的辅助工具

项目描述

贝塞尔曲线、三角形和更高阶对象的辅助工具

Linux Build (GitHub Actions) macOS Build (GitHub Actions) Windows Build (GitHub Actions) Code Coverage

Documentation Status Zenodo DOI for ``bezier`` "Journal of Open Source Science" DOI for ``bezier``

此库提供

深入了解并查看!

https://raw.githubusercontent.com/dhermes/bezier/2024.6.20/docs/images/triangles6Q_and_7Q.png

为什么是贝塞尔?

贝塞尔曲线(以及三角形等)是一种参数曲线,它使用 Bernstein基

https://raw.githubusercontent.com/dhermes/bezier/2024.6.20/docs/images/bernstein_basis.png

来定义曲线作为一个线性组合

https://raw.githubusercontent.com/dhermes/bezier/2024.6.20/docs/images/bezier_defn.png

这源于权重之和为1的事实

https://raw.githubusercontent.com/dhermes/bezier/2024.6.20/docs/images/sum_to_unity.png

这可以通过考虑三个、四个等非负权重之和为1来推广(在上面的例子中,我们有两个非负权重 s1 - s)。

由于它们的简单形式,贝塞尔曲线

  • 可以轻松地将几何对象作为参数曲线、三角形等进行建模。

  • 可以通过De Casteljau算法以高效和数值稳定的方式计算

  • 由于曲线(以及三角形等)是基函数的凸组合,因此可以利用凸优化技术对许多算法(如曲线-曲线交点)进行优化

许多应用及其开发历史都在“Bernstein多项式基:一个百年的回顾”中进行描述,例如;

  • 通过使用称为NURBS的几何形状函数来表示数据,它有助于在等几何模型上使用有限元素方法(FEM)进行物理分析

  • 用于动态系统的鲁棒控制;利用凸性创建曲线的凸包

安装

可以使用pip安装Bezier Python包

$ python     -m pip install --upgrade bezier
$ python3.12 -m pip install --upgrade bezier
$ # To install optional dependencies, e.g. SymPy
$ python     -m pip install --upgrade bezier[full]

要安装纯Python版本(即没有二进制扩展)

$ BEZIER_NO_EXTENSION=true \
>   python   -m pip install --upgrade bezier --no-binary=bezier

Bezier是开源的,因此您也可以从GitHub获取源代码并从源代码进行安装。

入门指南

例如,要创建曲线

>>> import bezier
>>> import numpy as np
>>> nodes1 = np.asfortranarray([
...     [0.0, 0.5, 1.0],
...     [0.0, 1.0, 0.0],
... ])
>>> curve1 = bezier.Curve(nodes1, degree=2)

也可以确定两条曲线之间的交点(点)

>>> nodes2 = np.asfortranarray([
...     [0.0, 0.25,  0.5, 0.75, 1.0],
...     [0.0, 2.0 , -2.0, 2.0 , 0.0],
... ])
>>> curve2 = bezier.Curve.from_nodes(nodes2)
>>> intersections = curve1.intersect(curve2)
>>> intersections
array([[0.31101776, 0.68898224, 0. , 1. ],
       [0.31101776, 0.68898224, 0. , 1. ]])
>>> s_vals = np.asfortranarray(intersections[0, :])
>>> points = curve1.evaluate_multi(s_vals)
>>> points
array([[0.31101776, 0.68898224, 0. , 1. ],
       [0.42857143, 0.42857143, 0. , 0. ]])

然后我们可以绘制这些曲线(及其交点)

>>> import seaborn
>>> seaborn.set()
>>>
>>> ax = curve1.plot(num_pts=256)
>>> _ = curve2.plot(num_pts=256, ax=ax)
>>> lines = ax.plot(
...     points[0, :], points[1, :],
...     marker="o", linestyle="None", color="black")
>>> _ = ax.axis("scaled")
>>> _ = ax.set_xlim(-0.125, 1.125)
>>> _ = ax.set_ylim(-0.0625, 0.625)
https://raw.githubusercontent.com/dhermes/bezier/2024.6.20/docs/images/curves1_and_13.png

有关API级别文档,请参阅Bézier Python 包文档

开发

要添加功能或运行功能测试,请参阅DEVELOPMENT文档以获取有关如何开始的更多信息。

引用

对于使用bezier的出版物,有一个可以引用的JOSS论文。以下BibTeX条目可以用于引用

@article{Hermes2017,
  doi = {10.21105/joss.00267},
  url = {https://doi.org/10.21105%2Fjoss.00267},
  year = {2017},
  month = {Aug},
  publisher = {The Open Journal},
  volume = {2},
  number = {16},
  pages = {267},
  author = {Danny Hermes},
  title = {Helper for B{\'{e}}zier Curves, Triangles, and Higher Order Objects},
  journal = {The Journal of Open Source Software}
}

可以通过Zenodo DOI引用该库的特定版本;查看版本列表

许可

bezier在Apache 2.0许可下提供。有关更多详细信息,请参阅许可

项目详细信息


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

bezier-2024.6.20.tar.gz (354.6 kB 查看散列)

上传时间 源代码

构建分发

bezier-2024.6.20-cp312-cp312-win_amd64.whl (1.8 MB 查看散列)

上传于 CPython 3.12 Windows x86-64

bezier-2024.6.20-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ x86-64

bezier-2024.6.20-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ ARM64

bezier-2024.6.20-cp312-cp312-macosx_14_0_x86_64.whl (1.9 MB 查看哈希值)

上传于 CPython 3.12 macOS 14.0+ x86-64

bezier-2024.6.20-cp312-cp312-macosx_14_0_arm64.whl (1.2 MB 查看哈希值)

上传于 CPython 3.12 macOS 14.0+ ARM64

bezier-2024.6.20-cp311-cp311-win_amd64.whl (1.8 MB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

bezier-2024.6.20-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

bezier-2024.6.20-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARM64

bezier-2024.6.20-cp311-cp311-macosx_14_0_x86_64.whl (1.9 MB 查看哈希值)

上传于 CPython 3.11 macOS 14.0+ x86-64

bezier-2024.6.20-cp311-cp311-macosx_14_0_arm64.whl (1.2 MB 查看哈希值)

上传于 CPython 3.11 macOS 14.0+ ARM64

bezier-2024.6.20-cp310-cp310-win_amd64.whl (1.8 MB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

bezier-2024.6.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

bezier-2024.6.20-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.9 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

bezier-2024.6.20-cp310-cp310-macosx_14_0_x86_64.whl (1.9 MB 查看哈希值)

上传于 CPython 3.10 macOS 14.0+ x86-64

bezier-2024.6.20-cp310-cp310-macosx_14_0_arm64.whl (1.2 MB 查看哈希值)

上传于 CPython 3.10 macOS 14.0+ ARM64

由以下赞助