【Blender】贝塞尔曲线图形原理和公式推导

2023-11-01

【Blender】贝塞尔曲线图形原理和公式推导

什么是贝塞尔曲线

贝塞尔曲线,英文名Bezier Curve,是计算机图形学非常重要的一种曲线

它可以将若干的点,用一条平滑自然的曲线来连接起来

比如我们在地图库中绘制用户行走轨迹时,如果用折线来展示,就比较难看

如果通过贝塞尔曲线,转为曲线来显示,就特别舒服自然了

像安卓中的水纹,波形等,很多就是通过贝塞尔曲线实现的

所以在讲绘制之前,先把这个基础知识给讲了


贝塞尔曲线简单示例

在这里插入图片描述

如图,P0和P2为贝塞尔曲线要经过的点,P1为控制点

选择不同的控制点,可以得到不同的曲线路径,但都可以结果P0和P2

贝塞尔曲线上的点如何确定

以上图为例,我们来推演下,最简单的贝塞尔曲线是如何确定点的

从P0开始,连接所有控制点,最后再连接到终点P2

我们随便在P0-P1上取一个点Q1,假设Q1的位置为t

t是指Q1到起点的位置,占整条线段长度的比例,所以它的范围是在0-1之间的小数

我们再在P1-P2上位置为t的地方,取一个点Q2

连接Q1-Q2,就形成了图中的绿线

再在Q1-Q2上位置为t的地方,取一个点R,就是图中的黑点

当t从0开始变化,逐渐增长到1,所有的黑点加起来,就形成了图中的红色曲线,它就是一条贝塞尔曲线

为什么贝塞尔曲线是连续的

从上面的推演过程,我们可以知道,贝塞尔曲线的路径,是一个关于t的函数

它的公式具体如何我们暂时不写出来,但一定是一个比较容易推到出来的公式

因为点确定的过程,就是根据两点的坐标,取线上中间某个比例位置的坐标,这就是个简单的乘法运算

当有多个控制点时,实际也就是进行了多次乘法运算,曲线是一个关于t的n次方的函数

学过高中数学的基本都知道,乘方函数,当变量t是均匀变化的,形成的肯定是一个圆滑连续的曲线

在高数中,这也叫做函数的连续性

贝塞尔曲线的阶数和公式

上面已经提到,贝塞尔曲线是关于比例t的乘方函数,t最高的次方数,就是贝塞尔曲线的阶数

上面的简单曲线,是一个二阶的贝塞尔曲线,只有一个控制点,公式中t的最高次方为2

L阶的贝塞尔曲线,有L-1个控制点,公式中t的最高次方为L

L阶的贝塞尔曲线公式如下
在这里插入图片描述

多阶贝塞尔曲线效果展示

曲线
在这里插入图片描述
一阶贝塞尔曲线
在这里插入图片描述
二阶贝塞尔曲线
在这里插入图片描述
三阶贝塞尔曲线
在这里插入图片描述
四阶贝塞尔曲线
在这里插入图片描述
五阶贝塞尔曲线

通过递归函数计算贝塞尔曲线

通过上面的数学公式,我们可以求得贝塞尔曲线上的点,但在编程中编写复杂的数学公式,是有点繁琐的

其实我们可以通过递归函数,直接算出比例t对应的坐标位置

递归运算的效率会比数学公式低,但是更加简单,偷懒的可以使用递归方法

这里我们以四阶贝塞尔曲线为例,简单讲解下递归过程
在这里插入图片描述

  1. 将所有起点-控制点-终点连接起来,形成4条灰色线段
  2. 每条灰色线段上的t位置取一个点,再连接起来,形成3条绿色线段
  3. 每条灰色线段上的t位置取一个点,再连接起来,形成2条蓝色线段
  4. 每条蓝色线段上的t位置取一个点,再连接起来,形成1条粉色线段
  5. 在粉色线段上的t位置取一个点,这个点就是贝塞尔曲线上t对应的位置

可以看出,整个过程就是一个不断递归的过程,每次在t位置取点,重新连接成新的线段,直到最后只有一个点

这个递归实现起来非常简单,这里就不给出具体代码了

  1. 用一个List存储全部的坐标值
  2. 再每相邻两个元素取t位置的中间值,形成一个新的List
  3. 如此递归,直到List中只剩一个点,这个点就是贝塞尔曲线上t对应的位置

贝塞尔曲线公式推导

这部分属于数学公式推导,不感兴趣或看不懂的,可以直接跳过,直接使用上面的结论公式即可
在这里插入图片描述
设最大阶数为Level,P[n,i]表示递归过程中的所有取点,n表示第几轮递归,i表示P在该轮所有取点中的顺序

已知所有P[0,i]的坐标,就是最初的已知点坐标,每一轮递归,n加1,i的最大值,也就是取点的总数减1

当n=Level时,只能取到唯一一个点,这个点就是我们想要求得的,贝塞尔曲线上比例t对应的点P[Level,0]

通过图示,我们可以很明显地看出,相邻两轮取点间的递推关系
在这里插入图片描述
这个递推算法又叫做"德卡斯特里奥算法",下面的图可以帮助我们更好地理解推理过程
在这里插入图片描述
参考文献
贝塞尔曲线(Bezier Curve)原理及公式推导_CCC的专栏-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Blender】贝塞尔曲线图形原理和公式推导 的相关文章

随机推荐

  • linux 堆探索

    堆的虚拟地址是连续的 是brk来分配 brk是一个指针指向堆顶的指针 并且是可以复用的 但是只有在堆顶空闲128k时 才收缩 也就是说 为了减少page fault 可重用 开销小的特点 但是会内存碎片 但是分配内存 gt 128k时 就是
  • 【无机纳米材料科研制图——3ds Max 0102】3dmax界面及常用功能说明

    上一篇中 我们以一个核壳纳米粒子的创建 直奔主题 先入为主 开始了3dmax的技术分享 此篇 我们开始从大局上对3dmax的界面和功能区进行一个说明 一 界面分布 界面常用的主要功能区是下图中的五个 当然还有动画视频方面的控制区 暂不介绍
  • Matplotlib 可视化50图:散点图(1)

    导读 本系列将持续更新50个matplotlib可视化示例 主要参考Selva Prabhakaran 在MachineLearning Plus上发布的博文 Python可视化50图 定义 关联图是查看两个事物之间关系的图像 它能够展示出
  • 智能图片降噪-Topaz Photo AI

    今天给各位小伙伴们测试了一款可以使视频智能无损放大的软件 Topaz Photo AI 小编在很早之前也有了解过Topaz系列的软件 都是通过人工智能处理的 对小白新手们很适用 由于使用人工智能方面的软件或程序对硬件要求都比较高 因此不方便
  • 再谈 QtDesigner 可视化连接信号 槽

    在VS20xx Qtx xx 开发模式下 打开ui文件 所用的英文QT Designer工具 没有转到槽函数的功能 不如QtCreator自带的QtDesigner功能齐全 只能Editor已有的信号槽 而在QtCreator中右击某个控件
  • JSP中page指令的import命令具有什么功能呢?

    转自 JSP中page指令的import命令具有什么功能呢 jsp简介 JSP全称是Java Server Pages 是一种动态网页技术 JSP其实就是在html中插入了java代码和JSP标签之后形成的文件 文件名以 jsp结尾 其实J
  • 腾讯会议录屏后,忘记转码或转码不成功的补救方法(含详细图例转码示范)。

    一 问题 腾讯会议录屏后文件只能由腾讯会议识别 其他设备打不开 所以需要用腾讯会议转为MP4格式 通过利用历史会议中操作进行手动转码或者是创建一个新的会议模拟还原设备文件 例如无论是哪一个腾讯会议 只需要将其录屏文件 替换为自己想要转换的文
  • Tomcat源码解析(一)下载源码与导入eclipse

    自从写web程序以来 web程序是如何在Tomcat中运行的一直困惑着我 不知道底层的运行机制是无法真正理解web的 所以就开始研究Tomcat源码 Tomcat是一个轻量级的Java服务器 再结合 How Tomcat works 和网上
  • Python实战项目:为人脸照片添加口罩

    前言 好想玩点不一样的 感觉平常的已经不能吸引大家了 想了又想 我今天给大家分享如何给人像添加口罩吧 毕竟最近疫情那么 严重 也只能玩玩这个了 大家千万别乱跑啊 效果展示 数据集展示 数据集来源 使用了开源数据集FaceMask Celeb
  • webpack打包原理

    作者 好奇男孩 链接 https www jianshu com p 37ff752d0f97 来源 简书 1 webpack核心概念 entry 一个可执行模块或库的入口文件 chunk 多个文件组成的一个代码块 例如把一个可执行模块和它
  • 为什么要做期货反向跟单之风控

    反向跟单来自于28定律 138证券市场本身是一个残酷的市场5098 从散户交易者4957的角度上能够看到大多数的交易者都是亏损的 虽然网上统计数据表明82 的交易者都是亏损的 但是具体实际数据应该远高于82 的亏损数量 向跟单思维模式利用的
  • 微服务中什么是熔断?什么是服务降级?

    开始做微服务项目 先回顾回顾基础概念 原文 https www cnblogs com lingboweifu p 11808307 html 服务熔断的作用类似于我们家用的保险丝 当某服务出现不可用或响应超时的情况时 为了防止整个系统出现
  • 天池热身赛-布匹瑕疵目标检测

    1 检测代码 代码源自datawhale官方提供baseline https github com datawhalechina team learning cv tree master DefectDetection baseline使用
  • QEMU模块模型

    QEMU模块模型 define module init function type static void attribute constructor do qemu init function void register module i
  • 用python代码实现输入基金代码爬取季度报告并获取季报特定模块内容制作动态词云图

    本文涉及爬虫 pdf文件转txt文件 提取指定内容和生成词云图四个部分 文章目录 前言 一 引入库 二 爬取网页上的基金季报 三 pdf转txt文件 四 提取指定内容 五 删除页眉页脚 六 制作词云图 总结 前言 本文将介绍如何爬取网站上的
  • 使用Pysot和MATLAB目标跟踪画对比图,标注框

    使用Pysot和MATLAB目标跟踪画对比图 标注框 python画图点会掉 MATLAB点会涨 具体什么原因 我也不知道 最近也是在画图 搞了很久 翻了很多博客 才弄好 哈哈 在很多博客留下了身影 太多人私聊问我怎么画的 就简单写个教程
  • ESXI安装Mikrotik RouterOS(ROS)软路由部署指南(附授权镜像下载)

    一 什么是RouterOS ROS ROS优点与缺点 RouterOS 简称ROS 是一种路由操作系统 基于Linux开发 兼容x86 PC的路由软件 是目前功能较强 应用较广的软路由系统 适用于中小企事业单位 网吧 宾馆和运营商 通过该软
  • warning The transaction log file is corrupted.

    Remark Even if appealing using compress option has a constraint when preparing the backup as clearly stated by Percona B
  • 实现两个路由器漫游(传统路由器做AP)

    如果您有钱 请买300 个以上的路由器 接上之后进入设置页面会显示选择AP模式 你继续就好了 本文针对TP Link一类没有模式选择的 方法大致两种 一 接WAN口 不同网段 开DHCP 1 修改IP地址为不同网段 比如前端路由器的IP地址
  • 【Blender】贝塞尔曲线图形原理和公式推导

    Blender 贝塞尔曲线图形原理和公式推导 什么是贝塞尔曲线 贝塞尔曲线 英文名Bezier Curve 是计算机图形学非常重要的一种曲线 它可以将若干的点 用一条平滑自然的曲线来连接起来 比如我们在地图库中绘制用户行走轨迹时 如果用折线