B样条曲线生成

Bezier曲线缺点:改变任一控制点的位置,将影响整条曲线的形状。

B样条曲线是对Bezier曲线的改进,可进行局部控制,生成的曲线与控制多边形的外形更接近,将Bezier曲线作为一特例。

三次B样条曲线的矩阵表达式

\[\begin{aligned}P(t) &= \frac 1 6 \begin{bmatrix} t^3 & t^2 &t & 1\end{bmatrix}\begin{bmatrix}-1 & 3 & -3 & 1\\ 3& -6 & 3 & 0\\ -3 & 0 & 0 & 0\\ 1& 4& 1& 0\end{bmatrix} \begin{bmatrix} P_0 \\ P_1 \\P_2 \\ P_3\end{bmatrix}\quad 0\le t \le 1\end{aligned}
\]

\[\begin{aligned}P'(t) &= \frac 1 2 \begin{bmatrix} t^2 &t & 1\end{bmatrix}\begin{bmatrix}-1 & 3 & -3 & 1\\ 2& -4 & 2 & 0\\ -1 & 0 & 1& 0\end{bmatrix} \begin{bmatrix} P_0 \\ P_1 \\P_2 \\ P_3\end{bmatrix}\end{aligned}
\]

\[\begin{aligned}P''(t) &= \begin{bmatrix} t & 1\end{bmatrix}\begin{bmatrix}-1 & 3 & -3 & 1\\ 1& -2 & 1 & 0\\ \end{bmatrix} \begin{bmatrix} P_0 \\ P_1 \\P_2 \\ P_3\end{bmatrix}\end{aligned}
\]

根据以上三式,得

\[P(0)=\frac 16 (P_0+4P_1+P_2)
\]

\[P(1)=\frac 16 (P_1+4P_2+P_3)
\]

\[ P’(0)=\frac 1 2(P_2-P_0)
\]

\[P’(1)=\frac 1 2(P_3-P_1)
\]

\[P’’(0)= P_0-2P_1+P_2
\]

\[P’’(1)= P_1-2P_2+P_3
\]

起点\(P(0)\)和终点\(P(1)\)不在特征多边形的顶点上

\(P’(0)\)平行于\(P_0P_2\) ,\(P’(1)\)平行于\(P_1P_3\)

Bezier曲面

讨论双三次Bezier曲面,通过给顶的\(4\times 4\)个空间网格点来控制的。16个控制点决定了Bezier曲面的形状。

将16 个控制点写成矩阵:

\[B=
\begin{bmatrix}
P_{00} & P_{01} & P_{02} & P_{03}\\
P_{10} & P_{11} & P_{12} & P_{13}\\
P_{20} & P_{21} & P_{22} & P_{23}\\
P_{30} & P_{31} & P_{32} & P_{33}
\end{bmatrix}
\]

Bezier曲面的表达式为:

\[r(u,w)=U\cdot N\cdot B\cdot N^T\cdot W^T\qquad 0≤u≤1, 0≤w≤1
\]

写成x,y,z三个方向分量的形式,则Bezier曲面可表示为:

\[x(u,w)=U\cdot N\cdot B_x\cdot N^T\cdot W^T
\]

\[y(u,w)=U\cdot N\cdot B_y\cdot N^T\cdot W^T
\]

\[z(u,w)=U\cdot N\cdot B_z\cdot N^T\cdot W^T
\]

\[0≤u≤1, 0≤w≤1
\]

曲线生成与求交—B样条曲线的更多相关文章

  1. 曲线生成与求交—Bezier曲线

    Bezier曲线生成 法国工程师Pierre Bezier在雷诺公司使用该方法来设计汽车.一条Bezier曲线可以拟合任何数目的控制点. 公式 设\(n+1\)个控制点\(P_0,P_1--P_n\) ...

  2. 实验6 Bezier曲线生成

    1.实验目的: 了解曲线的生成原理,掌握几种常见的曲线生成算法,利用VC+OpenGL实现Bezier曲线生成算法. 2.实验内容: (1) 结合示范代码了解曲线生成原理与算法实现,尤其是Bezier ...

  3. ray与triangle/quad求交二三事

    引擎中,ray与quad求交,算法未细看,但有求解二次方程,不解.ray与triangle求交,使用的是97年经典算法,仔细看过论文,多谢小武同学指点,用到了克拉默法则求解线性方程组.想模仿该方法,做 ...

  4. [NetTopologySuite](2)任意多边形求交

    任意多边形求交: private void btnPolygon_Click(object sender, EventArgs e) { , , , , , , , , , , , , , }; , ...

  5. HDU - 3982:Harry Potter and J.K.Rowling(半平面交+圆与多边形求交)(WA ing)

    pro:给定一枚蛋糕,蛋糕上某个位置有个草莓,寿星在上面切了N刀,最后寿星会吃含有草莓的那一块蛋糕,问他的蛋糕占总蛋糕的面积比. sol:显然需要半平面交求含有蛋糕的那一块,然后有圆弧,不太方便求交. ...

  6. 光线求交-面、三角形、球 (Ray intersection)

    光线求交 光线定义:position \(a(t)\) = \(o\) + \(t\vec{d}\); 球定义: center p, radius r; 平面定义:normal \(\vec{n}\) ...

  7. hdu 5111 树上求交

    hdu 5111 树上求交(树链剖分 + 主席树) 题意: 给出两棵树,大小分别为\(n1\),\(n2\), 树上的结点权值为\(weight_i\) 同一棵树上的结点权值各不相同,不同树上的结点权 ...

  8. 一步一步实现基于GPU的pathtracer(二):求交算法

    不管是哪种全局光照算法,最根本的都要落实到光线与物体的求交.主要分为光线与参数曲面和非参数曲面的求交,典型的参数曲面有球.盒.圆柱等基本体及基本体的组合体,以及一些更为复杂的参数曲面.非参数曲面就是所 ...

  9. OpenCASCADE直线与平面求交

    OpenCASCADE直线与平面求交 在<解析几何>相关的书中都给出了直线和平面的一般方程和参数方程.其中直线的一般方程有点向式形式的. 由于过空间一点可作且只能作一条直线平行于已知直线, ...

随机推荐

  1. JavaScript图形实例:阿基米德螺线

    1.阿基米德螺线 阿基米德螺线亦称“等速螺线”.当一点P沿动射线OP以等速率运动的同时,该射线又以等角速度绕点O旋转,点P的轨迹称为“阿基米德螺线”. 阿基米德螺线的笛卡尔坐标方程式为: r=10*( ...

  2. gvim使用总结

    我的gvim配置 set nocompatible " 关闭vi兼容 " 显示相关 set go= set number set cursorline set nowrap set ...

  3. md5加密密码

    using System.Security.Cryptography; public string GetStrMd5(string ConvertString) { MD5CryptoService ...

  4. day1 python计算器底层运作,注释及变量

    每日一记 utf-8 国际标准编码(可变长的unicode编码)中文3字节,英文数字特殊字符1字节 gbk 中国标准编码 中文2字节,英文数字特殊字符1字节 1.原码,反码,补码 "&quo ...

  5. ant-design-vue中实现modal模态框的复用(添加,编辑展示同一个模态框)

    用两个button(添加,编辑)按钮展示同一个模态框,并不是什么大问题,问题在于解决这两个模态框得有自己的确定和取消方法 父页面完全接管子页面(利于子页面复用) 父页面代码: <template ...

  6. [Antd-vue] Warning: You cannot set a form field before rendering a field associated with the value.

    在用ant-design-vue的框架中,使用到了这种场景,就是点击编辑按钮,弹出modal模态框,渲染modal模态框中的form表单页面,并给表单赋值,但是在给表单赋值的时候,总是会报错. 错误提 ...

  7. DEX文件解析--7、类及其类数据解析(完结篇)

    一.前言    前置技能链接:       DEX文件解析---1.dex文件头解析       DEX文件解析---2.Dex文件checksum(校验和)解析       DEX文件解析--3.d ...

  8. RAC环境上搭建DG

    首先RAC要确实是开归档的状态archive log list;如果是非归档状态,需要执行下面几步srvctl stop database -d +数据库实例名 关闭数据库--节点1(要做DG主库的) ...

  9. IDEA 编译 Jmeter 5.0

    IDEA 编译 Jmeter 5.0 1.下载源码后解压,我这边下载的是最新的『apache-jmeter-5.0_src.tar』,解压. 2.解压后 修改下列两个文件 eclipse.classp ...

  10. Python对列表去重的各种方法

    一.循环去重   二.用 set() 去重 1.set()对list去重 2.list 是有序的,用 sort() 把顺序改回来  三.利用 dict 的属性来去重 1.用 dict 的 fromke ...