前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【GAMES101】Lecture 11 贝塞尔曲线

【GAMES101】Lecture 11 贝塞尔曲线

作者头像
叶茂林
发布2024-01-29 08:51:39
1310
发布2024-01-29 08:51:39
举报

曲线这部分基本上就单讲了贝塞尔曲线

贝塞尔曲线(Bezier curves)

很早之前说过的这种矢量图是不会随着放大而失真的,像这种字体,就是用了逐段的三次贝塞尔曲线实现的

比方说有这四个控制点p0、p1、p2和p3,那么贝塞尔曲线的起点就是p0,终点就是p3,而且在起点的切线t0方向就是p0p1,在终点的切线t1方向就是p2p3,实际上切线的大小也是确定的,这个到后面讲这个贝塞尔曲线怎么画就知道怎么来的了

De Casteljau’s algorithm

这个De Casteljau’s algorithm就是讲这个贝塞尔曲线怎么画的,先考虑简单的三个控制点的怎么画,即二次贝塞尔曲线

假设我们画完这个贝塞尔曲线需要一个时间,这个时间长度为1,那么我们需要确定的是每个时间t,这个贝塞尔曲线会画出的点在哪里

我们再次使用这个线性插值,对于时间t,先在第一条线段b0b1中找出比值为t/1的点

然后在第二条线段b1b2中找出比值为t/1的点

然后把找出的两个连起来形成一条新线段,在这个新线段中继续寻找比值为t/1的点,这个点就是贝塞尔曲线在时间t时画出的点

依次枚举出每个时间t的点就可以画出贝塞尔曲线

同理如果是四个控制点,递归的思想解决问题,一轮可以减少一个控制点

Hackery, Math & Design — Acko.net

实际上可以通过数学的方式写出来

实际上是通过Bernstein多项式求和

因此可以计算出三次贝塞尔曲线的切线大小,即四个控制点

并且仿射变换前后画出的贝塞尔曲线是一样的

贝塞尔曲线不会超过控制点所形成的凸包,所谓凸包,就控制点能够框起来的范围

当控制点非常多的时候,贝塞尔曲线无法很好的描述这个变化的曲线

因此出现了逐段的贝塞尔曲线,即将每四个点画一段贝塞尔曲线

但是这样每段之间会出现一个曲折,解决办法是让上一段在终点的切线和下一段在起点的切线大小相等方向相反

C0连续:函数值连续,即线连起来不断,C代表continuity

C1连续: 一阶导数连续

B-splines

这个样条Spline是非常复杂的东西,简单来说就是通过一组给定点并具有一定数量连续导数的连续曲线

这个B样条就是basis Spline的简称, 这个B样条是什么呢?对于一条曲线,我们不希望改变某个控制点就会影响到整一条曲线,即希望曲线具有局部性,我改动一个点就只会影响一部分,就像我们前面说的这个逐段的贝塞尔曲线,这就是一种B样条

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 贝塞尔曲线(Bezier curves)
  • De Casteljau’s algorithm
  • B-splines
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档