曲线生成与求交—Bezier曲线
Bezier曲线生成
法国工程师Pierre Bezier在雷诺公司使用该方法来设计汽车。一条Bezier曲线可以拟合任何数目的控制点。
公式
设\(n+1\)个控制点\(P_0,P_1……P_n\),其中$P_k=(X_k,Y_k,Z_k),0≤k≤n $
则\(n\)次Bezier曲线为:
\]
其中,\(B_{i,n}(t)\)是Bernstein基函数,即
c_n^i=\frac {n!}{i!(n-i)!}\quad i=0,1,2\cdots n
\]
Bezier曲线的特性
在贝塞尔曲线中,只有起点和终点在曲线上
曲线在两个端点处的边界条件:
\]
证明:
&P(0)= ∑PiB_{i,n}(t)= ∑PiB_{i,n}(0)\\
&B_{i,n}(0)= c_n^it^i(1-t)^{n-i}=c_n^i0^i\\
&i=0时0^0=1\\
&B_{0,n}(0)=cn0=1\\
&B_{i,n}(0)=0\quad (i≠0时)\\
&∴ P(0)=P_0 \\
\end{align*}
\]
&P(1)= ∑P_iB_{i,n}(1)\\
&B_{i,n}(1)= c_n^i1^i(1-1)^{n-i}\\
&B_{n,n}(1)=c_n^n1^n0^0=1\quad (i=n时)\\
&B_{i,n}(1)=0\quad (i≠n时)\\
&∴P(1)=Pn
\end{align*}
\]
曲线起点的切线在头两个控制点连线上,曲线终点的切线在最后两个控制点连线上。
Bezier曲线在端点处的一阶导数值可以由控制点坐标计算:
P’(1)=-nP_{n-1}+nP_n
\]
Bezier曲线落在控制点的凸包内(凸多边形边界)
三次Bezier曲线
三次Bezier曲线由四个控制点生成。
当n=3时,
&B_{i,3}(t)=c_3^it^i(1-t)^{3-i}\quad i=0,1,2,3\\
&B_{0,3}(t)=c_3^0t^0(1-t)^{3-0}=(1-t)3\\
&B_{1,3}(t)=3t(1-t)^2\\
&B_{2,3}(t)=3t^2(1-t)\\
&B_{3,3}(t)=t^3\\
\end{align*}
\]
则:
P(t)= ∑P_iB_{i,3}(t)
&=P_0B_{0,3}(t)+ P_1B_{1,3}(t)+ P_2B_{2,3}(t)+ P_3B_{3,3}(t) \\
&=
\begin{bmatrix}
B_{0,3}(t) & B_{1,3}(t) & B_{2,3}(t) & B_{3,3}(t)
\end{bmatrix}
\begin{bmatrix}
P_0 \\ P_1 \\ P_2 \\ P_3
\end{bmatrix}
\\
&= \begin{bmatrix}
t^3 & t^2 &t & 1
\end{bmatrix}
\begin{bmatrix}
-1 & 3 & -3 & 1\\
3& -6 & 3 & 0\\
-3 & 3 & 0 & 0\\
1& 0& 0& 0
\end{bmatrix}
\begin{bmatrix}
P_0 \\ P_1 \\ P_2 \\ P_3
\end{bmatrix}
\end{aligned}
\]
那么,\(x(t)\)和\(y(t)\)分别为:
\]
y(t)
&= \begin{bmatrix}
t^3 & t^2 &t & 1
\end{bmatrix}
\begin{bmatrix}
-1 & 3 & -3 & 1\\
3& -6 & 3 & 0\\
-3 & 3 & 0 & 0\\
1& 0& 0& 0
\end{bmatrix}
\begin{bmatrix}
y_0 \\y_1 \\y_2 \\ y_3
\end{bmatrix}
\end{aligned}
\]
Bezier曲线的Casteljau算法
给定三维空间点\(P_0,P_1,\cdots ,P_n\)以及一维标量参数\(t\),假定:
\left\{\begin{matrix}
r=1,\cdots ,n\\
i=0,\cdots ,n-4
\end{matrix}\right.
\]
并且\(P_i^0(t)=P_i\)
那么\(P_i^n(t)\)即为Bezier曲线上参数\(t\)处的点
三次Bezier曲线的分割递推算法
\]
\]
\]
曲线生成与求交—Bezier曲线的更多相关文章
- 曲线生成与求交—B样条曲线
B样条曲线生成 Bezier曲线缺点:改变任一控制点的位置,将影响整条曲线的形状. B样条曲线是对Bezier曲线的改进,可进行局部控制,生成的曲线与控制多边形的外形更接近,将Bezier曲线作为一特 ...
- [摘抄] Bezier曲线、B样条和NURBS
Bezier曲线.B样条和NURBS,NURBS是Non-Uniform Rational B-Splines的缩写,都是根据控制点来生成曲线的,那么他们有什么区别了?简单来说,就是: Bezier曲 ...
- Bezier曲线的原理 及 二次Bezier曲线的实现
原文地址:http://blog.csdn.net/jimi36/article/details/7792103 Bezier曲线的原理 Bezier曲线是应用于二维图形的曲线.曲线由顶点和控制点组成 ...
- 实验6 Bezier曲线生成
1.实验目的: 了解曲线的生成原理,掌握几种常见的曲线生成算法,利用VC+OpenGL实现Bezier曲线生成算法. 2.实验内容: (1) 结合示范代码了解曲线生成原理与算法实现,尤其是Bezier ...
- C# 实现Bezier曲线(vs2008)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 连续bezier曲线的实现
需求场景 一系列的坐标点,划出一条平滑的曲线 3次Bezier曲线 基本上大部分绘图工具都实现了3次Bezier曲线,4个点确定一条3次Bezier曲线.以html5中的canvas为例 let ct ...
- 7.5.5编程实例-Bezier曲线曲面绘制
(a)Bezier曲线 (b) Bezier曲面 1. 绘制Bezier曲线 #include <GL/glut.h> GLfloat ct ...
- 简单而粗暴的方法画任意阶数Bezier曲线
简单而粗暴的方法画任意阶数Bezier曲线 虽然说是任意阶数,但是嘞,算法原理是可以到任意阶数,计算机大概到100多阶就会溢出了 Bezier曲线介绍] [本文代码] 背景 在windows的Open ...
- python bezier 曲线
1.手写bezier公式,生成bezier代码, 如果给的点数过多,则会生成一半bezier曲线,剩下的一半就需要进行拼接: import numpy as np import matplotlib. ...
随机推荐
- 从连接器组件看Tomcat的线程模型——连接器简介
Connector组件介绍 Connector(连接器)组件是Tomcat最核心的两个组件之一,主要的职责是负责接收客户端连接和客户端请求的处理加工.每个Connector都将指定一个端口进行监听,分 ...
- 洛谷 P5022 旅行
今天换标题格式了,因为感觉原版实在有点别扭…… 还是直接上题板,看完题再讲吧: 对了有个小细节没说,m一定是等于n或者等于n-1的. 这题是2018年提高组的真题哦!被我肝了2天肝出来了,2天……(真 ...
- 【翻译】Scriban README 文本模板语言和.NET引擎
scriban Scriban是一种快速.强大.安全和轻量级的文本模板语言和.NET引擎,具有解析liquid模板的兼容模式 Github https://github.com/lunet-io/sc ...
- 通过PHP工具箱-站点域名管理(创建本地虚拟主机)
工具:php程序员工具箱(网上很多请自己搜索下载) 1.点击其它选项菜单 -> 选择站点域名管理.如下图 2.进入站点域名管理.如下图(初始的时候,站点为空) 3.设置站点管理.如下图 网站域名 ...
- js获得url传过来的参数
function getParam(url) { var arr = url.split('?'); //取?以后 var a ...
- ST表解决RMQ问题
RMQ问题: RMQ(Range Minimum/Maximum Query),区间最值查询.对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间 ...
- 前端 /deep/ 深入样式(很深入的那种哦) 简单收藏
简单介绍:使用vue脚手架和elemen-ui开发的前端项目 遇到这样的场景: 对div下的el-select下拉组件 设置样式,直接在标签上用style属性是完全可以的,但我们的开发规范是前端样式 ...
- laravel报错1071 Specified key was too long; max key length is 1000 bytes
Laravel 默认使用utf8mb4字符编码,而不是的utf8编码.因此运行php artisan migrate会出现如下错误: [Illuminate\Database\QueryExcepti ...
- Salt组件(二)
四.配置管理States 是SaltStack中的配置语言,在日常进行配置管理时需要编写大量的States文件.比如我们需要安装一个包,然后管理一个配置文件,最后保证某个服务正常运行.这里就需要我们编 ...
- 官宣!AWS Athena正式可查询Apache Hudi数据集
1. 引入 Apache Hudi是一个开源的增量数据处理框架,提供了行级insert.update.upsert.delete的细粒度处理能力(Upsert表示如果数据集中存在记录就更新:否则插入) ...