BIM/CIM设计
抱着作业写都写了,不如记录一下(水一篇的)的原则,故有此帖
二维图形变换
旋转变换
绕着原点的旋转的变换矩阵
不算特别难,可以这样理解,在原点出作一个圆,函数式为
$$
x^2+y^2=r^2
$$
在圆上取一点A(x,y),假设OA与x轴的角度为α,那么坐标也可以表示为(rcosα,rsinα),那么如果将这个点旋转θ度呢,假设为点B(x’,y’),坐标可以表示为(rcos(α+θ),rsin(α+θ))。
将这个坐标分解一下
$$
rcos(α+θ) = rcosαcosθ - rsinαsinθ
$$
$$
rsin(α+θ) = rsinαcosθ + rsinθcosα
$$
可以得到下面这个公式,其中的第一个矩阵就是变化矩阵
$$
\begin{bmatrix}
cosθ & -sinθ\
sinθ & cosθ
\end{bmatrix}
\cdot
\begin{bmatrix}
rcosα\rsinα
\end{bmatrix}
\begin{bmatrix}
rcos(α+θ)\rsin(α+θ)
\end{bmatrix}
$$
因此,可以得到绕原点三十度的变换矩阵为
$$
\begin{bmatrix}
\frac{\sqrt{3}}{2} & -\frac{1}{2}\
\frac{1}{2} & \frac{\sqrt{3}}{2}
\end{bmatrix}
$$
如果是点P(2,4),根据上式计算
$$
\begin{bmatrix}
\frac{\sqrt3}{2} & -\frac{1}{2}\
\frac{1}{2} & \frac{\sqrt3}{2}
\end{bmatrix}
\cdot
\begin{bmatrix}
2\4
\end{bmatrix}
=
\begin{bmatrix}
\sqrt3-2\2\sqrt3+1
\end{bmatrix}
$$
可得旋转30°之后P’的坐标为
$$
\begin{bmatrix}
\sqrt{3}-2\2\sqrt{3}+1
\end{bmatrix}
$$
比例变换
关于点P(h,k)的比例变换,可以先分析对原点的比例变换。
假设存在点A(x,y),对原点进行比例缩放
点A’(x’,y’)=(sx,sy)
$$
\begin{bmatrix}
s & 0\
0 & s
\end{bmatrix}
\cdot
\begin{bmatrix}
x\y
\end{bmatrix}
\begin{bmatrix}
sx\sy
\end{bmatrix}
$$
如果要对固定点P(h,k)进行比例变换,可以将点P假设为原点,以点A为例,先变换为A’(x-h,y-k),那么对于点A来说,点P就是原点,然后比例变换之后再移动回来的位置,即A’’(s(x-h)+h,s(y-k)+k)=(sx+(1-s)h,sy+(1-s)k)
$$
\begin{bmatrix}
s & 0\
0 & s
\end{bmatrix}
\cdot
\begin{bmatrix}
x\y
\end{bmatrix}
+
\begin{bmatrix}
(1-s)h\
(1-s)k
\end{bmatrix}
\begin{bmatrix}
s(x-h)+h\s(y-k)+k
\end{bmatrix}
$$
使用齐次坐标变换之后可以转换为
$$
\begin{bmatrix}
s & 0 &(1-s)h\
0 & s &(1-s)k\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
x\y\1
\end{bmatrix}
\begin{bmatrix}
sx+(1-s)h\sy+(1-s)k\1
\end{bmatrix}
$$
组合变换
求三角形A(0,0),B(1,1),C(5,2)旋转45度后的新三角形的顶点 坐标。
(1)绕坐标原点旋转;
(2)绕P(-1,-1)旋转。
可以使用齐次坐标变换矩阵相乘
旋转变换矩阵
$$
\begin{bmatrix}
cosθ & -sinθ & 0\
sinθ & cosθ & 0\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
x\y\1
\end{bmatrix}
\begin{bmatrix}
x’\y’\1
\end{bmatrix}
$$
平移变换矩阵
点A(x,y) -> 点B(x+h,y+k)
$$
\begin{bmatrix}
1 & 0 & h\
0 & 1 & k\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
x\y\1
\end{bmatrix}
\begin{bmatrix}
x+h\y+k\1
\end{bmatrix}
\begin{bmatrix}
x’\y’\1
\end{bmatrix}
$$
比例变换矩阵
点A(x,y) -> B(sx,sy)
$$
\begin{bmatrix}
s & 0 & 0\
0 & s & 0\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
x\y\1
\end{bmatrix}
\begin{bmatrix}
sx\sy\1
\end{bmatrix}
\begin{bmatrix}
x’\y’\1
\end{bmatrix}
$$
(1)绕原点绕转45度,就是三个点都作一次绕转变换
三个点分别为A(0,0),B(1,1),C(5,2)
$$
\begin{bmatrix}
\frac{\sqrt2}{2} & -\frac{\sqrt2}{2} & 0\
\frac{\sqrt2}{2} & \frac{\sqrt2}{2} & 0\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
0\0\1
\end{bmatrix}
\begin{bmatrix}
0\0\1
\end{bmatrix}
$$
$$
\begin{bmatrix}
\frac{\sqrt2}{2} & -\frac{\sqrt2}{2} & 0\
\frac{\sqrt2}{2} & \frac{\sqrt2}{2} & 0\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
1\1\1
\end{bmatrix}
\begin{bmatrix}
0\\sqrt2\1
\end{bmatrix}
$$
$$
\begin{bmatrix}
\frac{\sqrt2}{2} & -\frac{\sqrt2}{2} & 0\
\frac{\sqrt2}{2} & \frac{\sqrt2}{2} & 0\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
5\2\1
\end{bmatrix}
\begin{bmatrix}
\frac{3\sqrt2}{2}\\frac{7\sqrt2}{2}\1
\end{bmatrix}
$$
(2)绕P(-1,-1)旋转,就是先作一次平移再作一次旋转再作一次平移
第一次平移
$$
T_1=
\begin{bmatrix}
1 & 0 & 1\
0 & 1 & 1\
0 & 0 & 1
\end{bmatrix}
$$
旋转
$$
T_2
\begin{bmatrix}
\frac{\sqrt2}{2} & -\frac{\sqrt2}{2} & 0\
\frac{\sqrt2}{2} & \frac{\sqrt2}{2} & 0\
0 & 0 & 1
\end{bmatrix}
$$
第二次平移
$$
T_3
\begin{bmatrix}
1 & 0 & -1\
0 & 1 & -1\
0 & 0 & 1
\end{bmatrix}
$$
根据计算
$$
T_3\cdot T_2 \cdot T_1 \cdot X = X’
$$
那么完整的变换矩阵就应该是
$$
\begin{bmatrix}
1 & 0 & -1\
0 & 1 & -1\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
\frac{\sqrt2}{2} & -\frac{\sqrt2}{2} & 0\
\frac{\sqrt2}{2} & \frac{\sqrt2}{2} & 0\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
1 & 0 & 1\
0 & 1 & 1\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
\frac{\sqrt2}{2} & -\frac{\sqrt2}{2} & -1\
\frac{\sqrt2}{2} & \frac{\sqrt2}{2} & \sqrt2-1\
0 & 0 & 1
\end{bmatrix}
$$
三个点分别为A(0,0),B(1,1),C(5,2)
$$
\begin{bmatrix}
\frac{\sqrt2}{2} & -\frac{\sqrt2}{2} & -1\
\frac{\sqrt2}{2} & \frac{\sqrt2}{2} & \sqrt2-1\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
0\0\1
\end{bmatrix}
\begin{bmatrix}
-1\\sqrt2-1\1
\end{bmatrix}
$$
$$
\begin{bmatrix}
\frac{\sqrt2}{2} & -\frac{\sqrt2}{2} & -1\
\frac{\sqrt2}{2} & \frac{\sqrt2}{2} & \sqrt2-1\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
1\1\1
\end{bmatrix}
\begin{bmatrix}
-1\2\sqrt2-1\1
\end{bmatrix}
$$
$$
\begin{bmatrix}
\frac{\sqrt2}{2} & -\frac{\sqrt2}{2} & -1\
\frac{\sqrt2}{2} & \frac{\sqrt2}{2} & \sqrt2-1\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
5\2\1
\end{bmatrix}
\begin{bmatrix}
\frac{3\sqrt2}{2}-1\\frac{9\sqrt2}{2}-1\1
\end{bmatrix}
$$
三维图形变换
旋转矩阵
首先要确定的是旋转的方向,以逆时针为正向,此逆时针方向为从旋转轴的正端点向负端点方向看的逆时针,即x转向y,y转向z,z转向x,此为正向。
依旧在球心作一个球
$$
x^2 + y^2 + z^2 = r^2
$$
绕z轴旋转时,设A(x,y,z),旋转α之后变为B(x’,y’,z’),其余的跟二维差不多
由于绕z轴旋转,所以z=z’
$$
\begin{bmatrix}
cosθ & -sinθ & 0 & 0\
sinθ & cosθ & 0 & 0\
0 & 0 & 1 & 0\
0 & 0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
x\y\z\1
\end{bmatrix}
\begin{bmatrix}
x’\y’\z’\1
\end{bmatrix}
$$
绕y轴旋转时,同理得,y=y’,但是此处有一个特别需要注意的点,那就是旋转方向
设A(x,y,z),原先的角度为θ,旋转α之后变为B(x’,y’,z’)
$$
x = -cos\theta\
y = sin\theta\
x’ = -cos(\theta+\alpha)\
y’ = sin(\theta+\alpha)
$$
可以看到x不是cosθ而是-cosθ,这就导致了绕y轴的旋转矩阵与其他轴的旋转矩阵不同。
$$
\begin{bmatrix}
cosθ & 0 & sinθ & 0\
0 & 1 & 0 & 0 \
-sinθ & 0 & cosθ & 0\
0 & 0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
x\y\z\1
\end{bmatrix}
\begin{bmatrix}
x’\y’\z’\1
\end{bmatrix}
$$
绕x轴旋转时,同理
$$
\begin{bmatrix}
1 & 0 & 0 & 0\
0 & cosθ & -sinθ & 0\
0 & sinθ & cosθ & 0\
0 & 0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
x\y\z\1
\end{bmatrix}
\begin{bmatrix}
x’\y’\z’\1
\end{bmatrix}
$$
对于点P(x,y,z)
(1)写出它绕x轴旋转α角,然后绕y轴旋转β角的变换矩阵。
(2)写出它绕y轴旋转β角,然后绕x轴旋转α角的变换矩阵。
(3)所得到的变换矩阵的结果一样吗?
对于问题1
$$
\begin{bmatrix}
cos\beta & 0 & sin\beta & 0\
0 & 1 & 0 & 0 \
-sin\beta & 0 & cos\beta & 0\
0 & 0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
1 & 0 & 0 & 0\
0 & cos\alpha & -sin\alpha & 0\
0 & sin\alpha & cos\alpha & 0\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
cos\beta & sin\beta sin\alpha & sin\beta cos\alpha & 0\
0 & cos\alpha & -sin\alpha & 0\
-sin\beta & sin\alpha cos\beta & cos\alpha cos\beta & 0\
0 & 0 & 0 & 1
\end{bmatrix}
$$
对于问题2
$$
\begin{bmatrix}
1 & 0 & 0 & 0\
0 & cos\alpha & -sin\alpha & 0\
0 & sin\alpha & cos\alpha & 0\
0 & 0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
cos\beta & 0 & sin\beta & 0\
0 & 1 & 0 & 0 \
-sin\beta & 0 & cos\beta & 0\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
cos\beta & 0 & sin\beta & 0\
sin\beta sin\alpha & cos\alpha & -sin\alpha cos\beta & 0\
-sin\beta cos\alpha & sin\alpha & cos\alpha cos\beta & 0\
0 & 0 & 0 & 1
\end{bmatrix}
$$
可以看到这两个变换矩阵并不一致
几何造型系统模型
几何造型系统中的线框造型、曲面造型和实体造型是计算机图形学和CAD领域常用的三种模型,以下是它们的描述以及优缺点分析:
1. 线框造型(Wireframe Modeling)
描述:通过顶点和边构成几何形状的骨架,通常用线段表示模型的边界和轮廓。
优点:
- 简单直观:表示形式简洁,适合快速生成和修改。
- 计算效率高:数据量小,适合简单的几何计算和低性能设备。
- 易于转换:可方便地与其他几何模型(如曲面和实体模型)结合使用。
缺点:
- 无法表示实体属性:没有体积、重量等物理属性。
- 易产生歧义:复杂模型中,可能会出现隐藏边和不可见表面的问题。
- 不支持布尔运算:难以进行交集、并集、差集等几何操作。
2. 曲面造型(Surface Modeling)
描述:通过定义物体的边界曲面(如NURBS曲面或多边形网格)来描述物体形状,适用于复杂和自由曲面。
优点:
- 精确描述形状:能够表示复杂曲面和自由形状,适用于工业设计、汽车外形设计等。
- 渲染效果好:表面细节明确,容易实现高质量的可视化和纹理映射。
- 灵活性高:支持精细化建模和编辑,例如局部调整。
缺点:
- 无法直接表示实体属性:与线框模型类似,只描述边界,缺少内部信息。
- 拓扑关系复杂:需要额外维护面与边、顶点的关系,数据结构复杂。
- 布尔运算困难:处理模型之间的几何交集需要复杂算法。
3. 实体造型(Solid Modeling)
描述:完整表示物体的外形和内部结构,常用构造方法包括边界表示(B-Rep)和构造实体几何(CSG)。
优点:
- 真实感强:包括物体的体积、质量、密度等属性,适合物理仿真和工程计算。
- 支持布尔运算:能方便地进行复杂的几何操作(并、交、差等)。
- 无歧义:每个模型都是封闭的三维体,不存在隐藏边或不可见表面的问题。
缺点:
- 计算复杂度高:数据结构复杂,存储和操作成本较高。
- 建模时间长:生成模型需要更多步骤,尤其是复杂模型。
- 不灵活:对自由形状的支持不如曲面造型。
总结对比
造型方法 | 适用场景 | 优势 | 劣势 |
---|---|---|---|
线框造型 | 快速原型设计、简单几何结构建模 | 简单高效,直观易理解 | 无实体信息,易产生歧义 |
曲面造型 | 自由曲面建模、工业设计、外形渲染 | 表面精确,适合复杂形状 | 缺乏物理属性,布尔运算复杂 |
实体造型 | 工程设计、物理仿真、制造加工 | 实体完整,支持物理计算和布尔操作 | 数据量大,建模复杂 |
使用建议
- 线框造型:适合初期概念设计或简单几何模型。
- 曲面造型:适用于需要复杂外观的场景,如汽车外形、艺术品设计等。
- 实体造型:适用于工程制造、结构分析和物理仿真。
在实际应用中,三种模型常结合使用。例如,使用线框造型进行初步设计,再用曲面造型处理细节,最后转为实体造型进行物理分析和制造。
实体造型数据结构
构造实体几何(Constructive Solid Geometry, CSG) 和 边界表示(Boundary Representation, B-Rep) 是几何造型中常用的两种实体建模方法,它们在数据表示、操作复杂度以及适用场景上各有优缺点。以下是详细的比较和分析:
1. CSG法
描述:通过布尔运算(并、交、差)组合基本几何体(如立方体、球体、圆柱等)构建复杂实体。
优点:
- 表达简洁:使用少量的几何体和布尔操作即可描述复杂模型,数据结构紧凑。
- 易于参数化:可以通过修改几何体的参数或布尔操作规则快速调整模型。
- 高精度:基于数学定义,精度不受离散化影响。
- 适合程序化生成:特别适用于自动化建模和基于规则的设计。
缺点:
- 渲染困难:CSG模型无法直接渲染,需要转换为多边形网格或B-Rep格式。
- 不直观:对设计者而言,操作几何体组合不如直接修改边界形状直观。
- 难以处理复杂形状:对自由曲面或复杂形状支持有限,模型表达能力较低。
- 布尔运算成本高:计算布尔运算结果可能涉及复杂的几何求交计算,效率较低。
2. B-Rep法
描述:通过物体的边界(顶点、边和面)描述其形状和拓扑结构。
优点:
- 表示复杂形状:能准确表达自由曲面、复杂曲线和不规则几何体。
- 渲染友好:模型结构接近于图形渲染所需的多边形网格,易于直接渲染和可视化。
- 支持局部修改:可直接修改顶点、边或面的几何参数,灵活性高。
- 适用范围广:在工业设计、机械制造等领域广泛应用,能直接支持精密建模。
缺点:
- 数据复杂度高:需要存储边界信息以及拓扑关系,数据结构复杂。
- 难以构造完整模型:需要确保模型的几何和拓扑一致性,建模过程容易出错。
- 布尔运算复杂:几何体间布尔操作需要计算新边界,算法复杂且计算成本高。
- 维护拓扑关系成本高:尤其是在对模型进行复杂操作时,拓扑结构的更新可能导致效率下降。
比较总结
特性 | CSG法 | B-Rep法 |
---|---|---|
表达能力 | 简洁,适合规则几何体 | 表达能力强,适合复杂形状 |
适用场景 | 参数化设计、规则几何体组合 | 工业设计、复杂曲面和不规则几何建模 |
操作灵活性 | 参数修改方便,局部调整困难 | 局部修改灵活,参数化较难 |
布尔运算 | 原生支持,但效率低 | 支持复杂形状布尔运算,但计算成本更高 |
存储需求 | 紧凑,基于数学公式描述 | 数据量大,需要存储边界和拓扑信息 |
渲染与可视化 | 必须转换为B-Rep或网格后才能渲染 | 直接渲染友好 |
算法实现难度 | 算法较为简单 | 算法复杂,需维护拓扑一致性 |
应用场景建议
- CSG法适用场景:
- 工程设计和制造:适用于规则几何体的快速建模(如机械零件设计)。
- 参数化建模:适合需要频繁调整形状参数的场景。
- B-Rep法适用场景:
- 工业设计:需要高精度复杂曲面建模(如汽车外形、飞机机翼设计)。
- 精密制造:需要对边界进行精细调整,适用于CNC加工或3D打印。
在实际工程中,CSG法和B-Rep法通常结合使用,例如用CSG法快速构建初始几何体,再转换为B-Rep法进行复杂的局部修改或渲染。
Hermite曲线
三次参数曲线的表示
$$
\begin{array}{l}
x(t) = a_1 + b_1t + c_1t^2 + d_1t^3\
y(t) = a_2 + b_2t + c_2t^2 + d_2t^3\
z(t) = a_3 + b_3t + c_3t^2 + d_2t^3\
\
p(t) =
\begin{bmatrix}
x(t)\
y(t)\
z(t)
\end{bmatrix}
\begin{bmatrix}
a_1 + b_1t + c_1t^2 + d_1t^3\
a_2 + b_2t + c_2t^2 + d_2t^3\
a_3 + b_3t + c_3t^2 + d_2t^3\
\end{bmatrix}
= p_0 + p_1t + p_2t^2 + p_3t^3
\end{array}
$$
推导Hermite曲线
$$
\begin{array}{l}
P(t) = p_0 + p_1t+ p_2t^2 + p_3t^3\
P’(t) = p_1 + 2p_2t + 3p_3t^2\
t = 0时,P(0) = p_0,P’(0) = p_1\
t = 1时,P(1) = p_0 + p_1 + p_2 + p_3,P’(1) = p_1 + 2p_2 + 3p_3
\end{array}
$$
联立可得
$$
\begin{array}{l}
p_0 = P(0)\
p_1 = P’(0)\
p_2 = 3(P(1) - P(0)) -2P’(0)- P’(1)\
p_3 = 2(P(1)-P(0))+P’(0)+P’(1)\
\end{array}
$$
可得
$$
\begin{array}{l}
p(t)\
= p_0 + p_1t + p_2t^2 + p_3t^3\
=P(0)+P’(0)t+[3(P(1) - P(0)) -2P’(0)- P’(1)]t^2 + [2(P(1)-P(0))+P’(0)+P’(1)]t^3
\end{array}
$$
选择t=0和t=1的理由
在参数化曲线的上下文中,通常选择 ( t = 0 ) 和 ( t = 1 ) 作为参数的特定值是为了简化曲线的定义和计算。这种选择有几个原因:
- 标准化参数范围
- 统一性:将参数范围标准化为 [0, 1] 使得曲线的定义更加一致和简洁。无论曲线的实际长度或形状如何,参数 ( t ) 的取值范围都是相同的,这使得在不同曲线之间进行比较和插值变得更加容易。
- 简化计算:在计算机图形学和动画中,使用统一的参数范围可以简化插值和动画的实现。例如,动画师可以在 [0, 1] 范围内定义关键帧,而计算机可以根据参数值自动插值生成平滑的动画。
- 控制点的定义
- 起始和结束点:在Hermite曲线中,( P_0 ) 和 ( P_1 ) 分别对应于 ( t = 0 ) 和 ( t = 1 )。这种定义使得曲线的起始和结束位置明确,便于控制和理解。
- 切线向量:切线向量 ( M_0 ) 和 ( M_1 ) 在 ( t = 0 ) 和 ( t = 1 ) 处的定义确保了曲线在这两个点的方向和斜率是可控的。这种控制对于生成平滑的曲线非常重要。
- 数学性质
- 多项式的性质:在多项式曲线中,选择特定的参数值(如 0 和 1)可以使得多项式的计算和求导变得更加简单。对于三次多项式,通常在这两个点处求值和求导可以直接得到曲线的起始和结束状态。
- 灵活性
- 参数化的灵活性:虽然我们通常选择 ( t = 0 ) 和 ( t = 1 ) 作为起始和结束点,但实际上,参数 ( t ) 可以被线性变换到其他范围。例如,如果你有一个参数范围 [a, b],可以通过线性变换将其映射到 [0, 1]。这样,仍然可以在 [0, 1] 范围内使用Hermite曲线的定义。
总结
选择 ( t = 0 ) 和 ( t = 1 ) 作为参数的特定值是为了简化曲线的定义、计算和控制。虽然可以选择其他值,但这种标准化的选择在实际应用中提供了更大的便利性和一致性。
三次Bezier曲线
三次Bezier曲线推导
首先明确一点,n次Bezier曲线是由n+1个确定的
首先看看一次Bezier曲线,就是一条线性插值曲线
$$
\begin{array}{l}
设存在点P_0和P_1\
B(t) = P_0 + (P_1-P_0)t = (1-t)P_0+P_1
\end{array}
$$
再看二次Bezier曲线,其实是由一次Bezier曲线推导而来的
$$
\begin{array}{l}
设存在三个点P_0、P_1、P_2,
\还存在两个点Q_0、Q_1,这两个点分别在线段P_0P_1和P_1P_2上
\
\Q_0 = B_0(t) = P_0 + (P_1-P_0)t = (1-t)P_0 + P_1
\Q_1 = B_1(t) = P_1 + (P_2-P_1)t = (1-t)P_1 + P_2
\B(t) = Q_0 + (Q_1-Q_0)t =(1-t)^2P_0 + 2t(1-t)P_1 + t^2P_2
\end{array}
$$
由于可以得到二次Bezier曲线的函数式,动态图如下
图源为https://zh.wikipedia.org/wiki/%E8%B2%9D%E8%8C%B2%E6%9B%B2%E7%B7%9A#/media/File:B%C3%A9zier_2_big.gif
再看三次Bezier曲线,显而易见三次Bezier曲线也是由二次Bezier曲线推导而来,且各个参数符合多项式定理
$$
\begin{array}{l}
设存在四个点P_0、P_1、P_2、P_3\
在线段P_0P_1、P_1P_2、P_2P_3上存在点Q_0、Q_1、Q_2
在线段Q_0Q_1、Q_1Q_2上存在点R_0、R_1\
\
R_0 = Q_0 + (Q_1-Q_0)t\
R_1 = Q_1 + (Q_2-Q_1)t\
B(t)\
= R_0 + (R_1-R_0)t\
= (1-t)^2Q_0 + 2t(1-t)Q_1 + t^2Q_2\
= (1-t)^3P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^3P_3
\end{array}
$$
由此便可以得到三次Bezier曲线的函数式,动态图如下
四次Bezier曲线,动态图如下
五次Bezier曲线,动态图如下(五次的比较帅)
三次B样条曲线
这个比较复杂我感觉
$$
{\displaystyle \mathbf {S} (t)=\sum {i=0}^{m-1}\mathbf {P} {i}b{i,n}(t){\mbox{ , }}t\in [t{n-1},t_{m+1}]}
\
{\displaystyle b_{j,0}(t)=\left<!–swig0–>\right.}
\
{\displaystyle b_{j,n}(t)={\frac {t-t_{j}}{t_{j+n}-t_{j}}}b_{j,n-1}(t)+{\frac {t_{j+n+1}-t}{t_{j+n+1}-t_{j+1}}}b_{j+1,n-1}(t)}
$$
先解释一下各个参数的含义,
$$
\begin{array}{l}
m:控制点的个数为m\
P_i:表示对应的控制点\
i:表示点的系数\
n: 表示B样条曲线的次数,组成的曲线的次数是 n - 1\
例如3次B样条曲线,该曲线是由2次函数的曲线拼接起来的\
t_i:表示取值范围\
b_{i,n}:是[Cox-deBoor 递归公式]
\end{array}
$$
先看一次B样条曲线
n=1,m=2,P就是控制点,t = [0,1,2,3]
$$
\begin{array}{l}
{\displaystyle \mathbf {S} (t)=\sum {i=0}^{1}\mathbf {P} {i}b{i,1}(t){\mbox{ , }}t\in [t{0},t_{3}]} \
\mathbf {S}(t) = \mathbf P_0b_{0,1}(t) + \mathbf P_1b_{1,1}(t)\
b_{0,1}(t) ={\frac {t-t_{0}}{t_{1}-t_{0}}}b_{0,0}(t)+{\frac {t_{2}-t}{t_{2}-t_{1}}}b_{1,0}(t)\
b_{1,1}(t) ={\frac {t-t_{1}}{t_{2}-t_{1}}}b_{1,0}(t)+{\frac {t_{3}-t}{t_{3}-t_{2}}}b_{2,0}(t)\
{\displaystyle b_{0,0}(t)=\left<!–swig1–>\right.}\
{\displaystyle b_{1,0}(t)=\left<!–swig2–>\right.}\
{\displaystyle b_{2,0}(t)=\left<!–swig3–>\right.}\
b_{0,1}(t) =\left<!–swig4–>{t_{1}-t_{0}}&\mathrm {} \quad t_{0}<t<t_{1}\\frac {t_{2}-t}{t_{2}-t_{1}}&\mathrm {} \quad t_{1}<t<t_{2}\0&\mathrm {…} \end{matrix}}\right.\
b_{1,1}(t) =\left<!–swig5–>{t_{2}-t_{1}}&\mathrm {} \quad t_{1}<t<t_{2}\\frac {t_{3}-t}{t_{3}-t_{2}}&\mathrm {} \quad t_{2}<t<t_{3}\0&\mathrm {…} \end{matrix}}\right.\
\mathbf {S}(t) = \mathbf P_0b_{0,1}(t) + \mathbf P_1b_{1,1}(t) = \left<!–swig6–>{t_{1}-t_{0}}&\mathrm {} \quad t_{0}<t<t_{1}\\mathbf P_0\frac {t_2-t}{t_{2}-t_{1}}+\mathbf P_1\frac {t-t_{1}}{t_{2}-t_{1}}&\mathrm {} \quad t_{1}<t<t_{2}\\mathbf P_1\frac {t_{3}-t}{t_{3}-t_{2}}&\mathrm {} \quad t_{2}<t<t_{3}\0&\mathrm {…} \end{matrix}}\right.\
=\left<!–swig7–>\right.
\end{array}
$$
好吧,非常难推(主要是latex太难写了,感觉不如手写)
主要就是阶数从低到高推导,然后计算出对应的参数,其余的都比较简单
反正推到最后可以推出三次B样条曲线的函数式为,其中N就是计算出的参数函数式
$$
C(t)=\sum_{i=0}^{n}N_{i,4}(t)P_i
$$
均匀B样条曲线就是指t的值为递增的等差数列,首项为0,公差为1
三次Bezier曲面
从Bezier曲线拓展到Bezier曲面
从一次Bezier曲线到一次Bezier曲面,已知由两个控制点能够控制一条一次Bezier曲线,那么由四个控制点组成的网格就能够控制一个一次Bezier曲面
$$
\begin{array}{l}
设四个控制点为P_{00},P_{01},P_{10},P_{11}\
P_{00}为左下角,P_{01}为左上角,P_{10}为右下角,P_{11}为右上角\
P_{00}P_{01}为v方向,P_{00}P_{10}为u方向\
先在v方向上插值,得到两条一次Bezier曲线\
B_{u0}(v) = (1-v)P_{00} + vP_{01}\
B_{u1}(v) = (1-v)P_{10} + vP_{11}\
再在u方向上插值,\
S(u,v) \
= (1-u)B_{u0}(v) + uB_{u1}(v) \
= (1-u)(1-v)P_{00} + u(1-v)P_{10} + (1-u)vP_{01} + uvP_{11}
\end{array}
$$
从二次Bezier曲线到二次Bezier曲面,二次Bezier曲面由3*3的网格组成
$$
\begin{array}{l}
设九个点为P_{00},P_{01},P_{02},P_{10},P_{11},P_{12},P_{20},P_{21},P_{22}\
先在v方向上插值,根据二次Bezier曲线可得\
R_{u0}(v) = (1-v)^2P_{00} + 2v(1-v)P_{01} + v^2P_{02}\
R_{u1}(v) = (1-v)^2P_{10} + 2v(1-v)P_{11} + v^2P_{12}\
R_{u2}(v) = (1-v)^2P_{20} + 2v(1-v)P_{21} + v^2P_{22}\
设B(v)为基函数\
{\displaystyle R_{ui}(v) = \sum_{j=0}^{2}P_{ij}B(v)},其中i\in[0,1,2]\
再在u方向上插值,
S(u,v) \
= {\displaystyle \sum_{i=0}^{2}R_{ui}(v)B(u)}\
= {\displaystyle \sum_{i=0}^{2}\sum_{j=0}^{2}P_{ij}B(v)B(u)}
\end{array}
$$
再回到三次Bezier曲线
可以注意到
$$
\begin{array}{l}
S(u,v) \
= {\displaystyle \sum_{i=0}^{3}R_{ui}(v)B(u)}\
= {\displaystyle \sum_{i=0}^{3}\sum_{j=0}^{3}P_{ij}B(v)B(u)}
\end{array}
$$
三次B样条曲面
$$
\begin{array}{l}
S(u,v)={\displaystyle\sum_{i=0}^{n}\sum_{j=0}^{m}N_{i,3}(u)N_{j,3}(v)P_{i.j}}
\end{array}
$$
加权残值法
在实现加权残值法之前首先要得出残差方程R(x)
残差方程就是将微分方程移到一侧得到的方程。
得到残差方程之后还应该估计出原方程的,可以通过二项式来估计原方程,然后计算未知的二项式参数。二项式参数就是加权残值法中的权值。