首页 > 其他 > 详细

N 阶贝塞尔曲线生成

时间:2020-04-29 21:33:44      阅读:74      评论:0      收藏:0      [点我收藏+]

博客转自:https://blog.csdn.net/aimeimeits/article/details/72809382

首先贝塞尔曲线简介,了解了基本的贝塞尔曲线知识之后,展开N阶贝塞尔曲线的生成方式。

N阶贝塞尔曲线的公式

百度百科上给出的一般参数公式是这样的:给定点 P0,P1,P2, … ,Pn,其贝塞尔曲线公式如下(即贝塞尔曲线上的点 B(t) 可由如下公式计算得到)
技术分享图片

 

 

可以看出其公式是由一个格式固定的表达式之和来表示,这个表达式就是关键:

技术分享图片

 

 

 该表达式可分为四个部分看:

  • 从 i 递增到 n 的常数部分
  • Pi 坐标部分
  • (1 - t)^(n - i)
  • t^i

 可以看出这四部分都与 i 的值相关,此外 t 值的计算方式为:i/(n+1)

可以从具体的例子中找到抽象规律

设 Bt 为要计算的贝塞尔曲线上的坐标,N 为控制点个数,P0,P1,P2..Pn 为贝塞尔曲线控制点的坐标,当 N 值不同时有如下计算公式: 如 N 为 3 表示贝塞尔曲线的控制点有 3 个点,这时 n 为 2 ,这三个点分别用 P0,P1,P2 表示。

  • N = 3: P = (1-t)^2*P0 + 2*(1-t)*t*P1 + t^2*P2
  • N = 4: P = (1-t)^3*P0 + 3*(1-t)^2*t*P1 + 3(1-t)*t^2*P2 + t^3*P3
  • N = 5: P = (1-t)^4*P0 + 4*(1-t)^3*t*P1 + 6(1-t)^2*t^2*P2 + 4*(1-t)*t^3*P3 + t^4*P4

将贝塞尔曲线一般参数公式中的表达式用如下方式表示:设有常数 a,b 和 c,则该表达式可统一表示为如下形式

a * (1 - t)^b * t^c * Pn

分析当 N 分别为3,4,5 时对应 a,b,c 的值:如 N = 3 时,公式有三个表达式,第一个表达式为 (1-t)^2*P0,其对应 a,b,c 值分别为:1,2,0

N = 3:   1,2,0   2,1,1   1,0,2
a: 1 2 1
b: 2 1 0
c: 0 1 2
N = 4:   1,3,0   3,2,1   3,1,2   1,0,3
a: 1 3 3 1
b: 3 2 1 0
c: 0 1 2 3
N = 5:   1,4,0   4,3,1   6,2,2   4,1,3   1,0,4
a: 1 4 6 4 1
b: 4 3 2 1 0
c: 0 1 2 3 4

根据上面的分析就可以总结出 a,b,c 对应的取值规则:

 

  • b: (N - 1) 递减到 0 (b 为 1-t 的幂)
  • c: 0 递增到 (N - 1) (c 为 t 的幂)
  • a: 在 N 分别为 1,2,3,4,5 时将其值用如下形式表示:

N=1:———1
N=2:——–1  1
N=3:——1  2  1
N=4:—–1  3  3  1
N=5:—1  4  6  4  1
a 值的改变规则为: 杨辉三角

C++实现代码

接下来就实现它:先再来一个例子: 比如计算控制点坐标分别为:P0(3,8),P1(2,3),P2(2,7),想要返回 10 个在贝塞尔曲线上的点,用 C++ 可以这样写:

 

N 阶贝塞尔曲线生成

原文:https://www.cnblogs.com/flyinggod/p/12804309.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!