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. java 面向对象(三十四):泛型三 自定义泛型类、泛型接口、泛型方法

    1.举例: [Order.java] public class Order<T> { String orderName; int orderId; //类的内部结构就可以使用类的泛型 T ...

  2. scrapy 源码解析 (三):启动流程源码分析(三) ExecutionEngine执行引擎

    ExecutionEngine执行引擎 上一篇分析了CrawlerProcess和Crawler对象的建立过程,在最终调用CrawlerProcess.start()之前,会首先建立Execution ...

  3. 前端05 /js基础

    前端05 /js基础 昨日内容回顾 css选择器的优先级 行内(1000) > id(100) > 类(10) > 标签(1) > 继承(0) 颜色 rgb(255,255,2 ...

  4. SpringCloud全家桶介绍及手绘架构

    文章目录 概述 一.业务场景介绍 二.Spring Cloud核心组件:Eureka 三.Spring Cloud核心组件:Feign 四.Spring Cloud核心组件:Ribbon 五.Spri ...

  5. [Qt2D绘图]-02坐标系统&&抗锯齿渲染

    本节的内容可以在帮助中通过Coordinate System关键字查看. 或者入门可以看<Qt Creator 快速入门>这本书.强烈推荐入门使用.下面的内容为本书的阅读笔记,喜欢的可以买 ...

  6. Burp Suite Decoder Module - 解码模块

    官方参考链接:https://portswigger.net/burp/documentation/desktop/tools/decoder 该模块主要进行编码和解码,支持编码方式有:Plain,U ...

  7. smartJQueryZoom(smartZoom) 存在的兼容性BUG,以及解决方法

    smartJQueryZoom 是一个很好用的库. 它基于jQuery,可以对某个元素(比如 img)进行渲染,渲染之后可以放大这个区域,在做图片浏览时很好用. 但它有一个兼容性BUG: 当浏览器不是 ...

  8. 使用 forever 启动 vue 需要注意的问题

    forever 是 nodejs 生态中一个用来永久挂起一个应用(当这个应用崩溃时能自己重启)的应用(库). 但用他启动vue的时候必须注意一个问题: 在哪个路径启动vue,就在哪个路径启动forev ...

  9. java enum 枚举类

    图一代码: public enum LogMethodEnum { WEBCSCARDVALID("返回值"), WEBCSVERIFYPASSWORD("返回值&quo ...

  10. Mybatis——@MapperScan原理

    @MapperScan配置在@Configuration注解的类上会导入MapperScannerRegistrar类. 而MapperScannerRegistrar实现了ImportBeanDef ...