python如何画贝塞尔曲线_使用Python实现贝塞尔曲线连接多点形成光滑曲线

给定多个点,如何将这些点连接起来形成一条光滑的曲线呢?我们已经了解关于贝塞尔曲线的公式以及几何画法,但是要如何来解决我们用曲线来连接各个顶点的问题呢?

对于两个点之间我们可以使用三阶贝塞尔曲线来连接,这样通过多段贝塞尔曲线相连,就可以得到我们想要的曲线。而三阶贝塞尔曲线需要两个控制点来确定,很显然贝塞尔曲线不一定通过控制点,但是肯定通过端点。所以给定的顶点只能做端点,那问题就变成了如何计算所需要的控制点?

首先要保证曲线在顶点处连续,就要求左边曲线在顶点处的切线和右边曲线在顶点处的切线一致。即函数的左导数等于右导数。

我们知道,保持连续的必要条件是顶点和它前后的控制点在同一条直线上,而该直线就是曲线在该顶点的切线。

这里有一种思路:穿过已知点画平滑曲线;英文原文地址,这里也有一篇文章说的是用lua语言来实现的:开放的多点贝塞尔曲线实现

总结一下如下图所示:网络图

如上图所示:如果需要绘制一条通过点A、B、C的曲线,我们需要计算各条用于连接的贝塞尔曲线的控制点。

以顶点B为例:

1、取AB和BC的中点E、F,并连接E、F

2、在EF上取点D,使得FD/DE = BC/AB

3、将直线EF按照矢量DB平移到通过B点,并且使得平移后的D和B点重合

4、得到E'与F'点用作贝塞尔曲线的控制点。

将上述算法应用于多边形的各个顶点,可以计算出2*n个控制点(每个顶点对应两个控制点)

下面给出python2.7版本实现:

#!/usr/bin/env python

# -*- coding: utf8

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值