AutoCAD中的Spline曲线算法分析(二)
来源:互联网 发布:贵州广电网络客服电话9 编辑:程序博客网 时间:2024/05/07 19:14
AutoCAD中的Spline曲线算法分析(二)
by eattonton
AutoCAD中的样条曲线(命令是Spline),是通过用户输入型值点之后,软件的插值计算,得到一条样条曲线。这条曲线的数学表达式是一条B样条曲线。这里就涉及一个样条曲线的反算计算。
B样条曲线的组成主要有一下各个方面:
1. 控制点,这是一个凸多边形。拟合出来的曲线,就在这个凸多边形里面生成。
2. 节点矢量,是一个范围Ui。计算的方法已经在上一篇文章中有详细说明。
3. 基函数,基函数的选择基本上都是使用Deboor-Cox递推公式。
在工程项目中基本上都是使用2次和3次B样条。AutoCAD中默认的就是3次样条曲线。上面讲的是曲线的正算过程,也就是知道控制点,节点矢量,基函数以及需要的次数。就能计算出这条曲线。样条曲线的反算过程,就麻烦的多。这这里我们明确我们需要计算的目标是什么:
题:已知几个型值点(Pi, i=1,2,3…n),曲线采用3次B样条插值。计算出该B样条曲线的所有参数。
下面我们按照正常的解数学题目的方式来反算题目。
解:
1. 节点矢量的计算
节点矢量的计算上篇文章已经说了,这里我们仍然采用累积弦长法。
2. 首末端点切线的确定
型值点的个数为n,需要计算的样条曲线为k次,那么控制点的数量就是 m=n+k-1, 在这里就是 m=n+2.
在首末端点,我们设定
V1 = P1, Vn+2 = Pn (Vi 就是控制点,有n+2个)
由于P1,Pn就是给定的型值点,为已知无需求解。剩下的等式就变成n-2个,却还需求解n个控制点。所以,我们在首末端点设置两个条件。
2.1 在已知首末切矢的情况下,有存在这样的等式
dP1 = 3*(V2-V1) = 3*V2 – 3*P1 --> 3*V2 = dP1 + 3*P1
dPn=3*(Vn+2-Vn+1)=3*Pn-3*Vn+1 --> 3*Vn+1 =3*Pn-dPn
其中dP1,dPn表示在P1和Pn点处的一阶导数
2.2 不知道切矢,就认为是自由端条件的情况下
6*P1 = 9*V2 -3*V3
6*Pn = -3*Vn + 9*Vn+1
3. 其他方程的计算
对于型值点内部的点,如果建立公式呢。可以通过节点矢量上面的间隔点作为输入值,计算系数矩阵,从而与型值点建立等式。
有了前面的准备,控制点就是一个解线型方程组的过程。这里不再赘述。
通过AutoCAD里面的模拟,我们的算法能够得到正确的结果。说明我们的算法对于软件的理解是正确的。
B样条曲线在项目的线型光顺中是一个很基础的概念,也是一个很重要的概念。如果后面有时间我想把散乱点的拟合,曲线光顺性的计算等也写一下。
- AutoCAD中的Spline曲线算法分析(二)
- AutoCAD中的Spline曲线算法分析(一)
- 绘制AutoCad中的曲线(Curve)
- 利用VBA实现AutoCAD的样条曲线SPline的打断转化
- Spline算法:输入几个点,输出一条曲线的点。
- B-spline【贝塞尔曲线】
- B-Spline曲线知识点归纳
- autocad反转曲线方向
- spline样条线算法
- Spline算法实现
- Vecad控件添加样条曲线(Spline)
- Bezier, B-Spline NURB曲线曲面
- B-spline Curves 学习之B样条曲线的移动控制点、修改节点分析(7)
- [以太坊源代码分析] IV. 椭圆曲线密码学和以太坊中的椭圆曲线数字签名算法应用
- Creating a spline-segment multileader in AutoCAD using .NET
- B-spline , deBoor算法实现
- Android 中的贝塞尔曲线分析详解
- CAD中样条曲线Spline怎样才能分解成多段弧arc?
- 新浪微博SDK分享+人人网 错误码大全
- eclipse部署 there are no resources
- Android多媒体分析(一)MediaScanner
- red and black
- Android—ProgressBar进度条应用
- AutoCAD中的Spline曲线算法分析(二)
- Unity中使用几何着色器制作类似于纪念碑谷的海(Unity几何着色器的一个例子)
- Java连接Mysql及操作
- 单词数测量
- spring 技术内幕--IOC
- java中内部类的问题
- Common Lisp入门笔记(一)7个基本运算符
- 大数据相乘
- [C/C++11]_[初级]_[使用std::tuple元组-固定大小的集合]