bézier曲线、三角形和高阶对象的辅助对象

bezier的Python项目详细描述


Helper for Bézier Curves, Triangles, and Higher Order Objects

CircleCI BuildTravis BuildAppVeyor CI BuildCode Coverage

Documentation StatusZenodo DOI for ``bezier``"Journal of Open Source Science" DOI for ``bezier``

此库提供:

潜进去看看!

https://raw.githubusercontent.com/dhermes/bezier/0.10.0/docs/images/surfaces6Q_and_7Q.png

为什么是贝齐尔?

bézier曲线(和曲面等)是参数曲线 使用Bernstein basis

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

将曲线定义为线性组合:

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

这是因为权重总和为1:

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

这可以通过考虑三、四等推广到更高阶。 总和为1的非负权重(在上面我们有两个 非负权重s1 - s)。

由于bézier曲线形式简单:

  • 可以轻松地将几何对象建模为参数曲线、曲面等。
  • 可通过 de Casteljau’s algorithm
  • 可以将凸优化技术用于许多算法(例如 曲线-曲线相交),因为曲线(和曲面等) 是基的凸组合

许多应用程序以及它们的发展历史- 描述于 “伯恩斯坦多项式基:百年retrospective”, 例如;

  • 使用有限元方法(FEM)辅助物理分析 使用几何形状函数的等几何模型 NURBS表示数据
  • [LI]用于动态系统的鲁棒控制;利用凸性 创建曲线外壳

安装

bezierpython包可以与pip:

一起安装
$ python    -m pip install --upgrade bezier
$ python3.7 -m pip install --upgrade bezier

bezier是开源的,因此您可以选择获取源代码 从GitHub编码并从源安装。

开始

例如,要创建曲线:

>>>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)>>>intersectionsarray([[0.31101776,0.68898224,0.,1.],[0.31101776,0.68898224,0.,1.]])>>>s_vals=np.asfortranarray(intersections[0,:])>>>points=curve1.evaluate_multi(s_vals)>>>pointsarray([[0.31101776,0.68898224,0.,1.],[0.42857143,0.42857143,0.,0.]])

然后我们可以绘制这些曲线 交叉路口:

>>>importmatplotlib.pyplotasplt>>>importseaborn>>>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)>>>plt.show()
https://raw.githubusercontent.com/dhermes/bezier/0.10.0/docs/images/curves1_and_13.png

对于api级文档,请查看bézier python package文档。

开发

要添加功能或运行功能测试,请参见 DEVELOPMENT doc了解有关如何获取 起动。

许可证

bezier在apache 2.0许可下可用。更多 详细信息,请参见the LICENSE

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java密钥安全如何确保密钥安全?   java Webelement屏幕截图错误   java Selenium:我正在使用Firefox版本46.01,并在显示的ECLIPSE错误消息中进行了测试   javascript Jquery自动完成不向java传递值   javajavax。坚持不懈persistenceexception eclipselink4002(eclipse持久性服务2.5.2.v 20140319   java检查大型HashMap是否包含键的最佳方法?   java如何解决连接mssql时的JNDI错误   modelandview内部重定向和重定向之间的java差异   swing如何处置未使用的JavaUI对象   java在数组中多次存储同一引用项,一次更改会影响所有引用项吗?   java项目Euler#14:为什么我的树形映射算法比暴力慢?   java如何使用不同的分隔符连接配置单元列   java在部署在不同服务器上的两个WAR之间共享pojo对象   Spring控制器中的java JSR303验证和获取@JsonProperty名称   java检查playstore是否安装了Android应用程序   java从一段字符串中选择一个单词?   当发生特定选择时显示组合框的java   大量调用后,构造函数中的JAVA数组复制速度异常缓慢   java无法使用KeyListner移动我的图像   使用Spring MVC和线程保存java实体