B样条绘制
来源:互联网 发布:电脑接口转换器 知乎 编辑:程序博客网 时间:2024/05/16 06:07
一、简介在数学的子学科数值分析里,B-样条是样条曲线一种特殊的表示形式。它是B-样条基曲线的线性组合。B-样条是贝兹曲线的一种一般化,可以进一步推广为非均匀有理B样条(NURBS),使得我们能给更多一般的几何体建造精确的模型。术语 B样条是Isaac Jacob Schoenberg创造的,是基(basis)样条的缩略B样条曲线曲面具有几何不变性、凸包性、保凸性、变差减小性、局部支撑性等许多优良性质,是目前CAD系统常用的几何表示方法,因而基于测量数据的参数化和B样条曲面重建是反求工程的研究热点和关键技术之一。De Boor算法是一个数值上稳定的计算B样条的方法。B一样条函数的研究最早开始于十九世纪,当时N.Lobachevsky把B一样条作为某些概率分布的卷积。在1946年,I.J.schoenberg利用B样条进行统计数据的光滑化处理,他的论文开创了样条逼近的现代理论。随后, CdeBoor,M.Cox和LMansfiekl发现了B一样条的递推关系。B一样条曲线的最初定义是基于差商,这种定义方法包含了复杂的数学公式,而且所得结果在数值上不稳定。 DeBoor与Hollig应用B一样条的递推关系作为出发点定义B一样条,这是一种完全不同于差商方法的定义公式。B一样条根据节点的不同又分为均匀B一样条基函数,周期B一样条基函数等类型。二、详细描述
任意个控制点的三次B样条曲线绘制系统设计.pdf
http://www.docin.com/p-450752810.html三、软件设计
1)matlab:
p=[0,1,2,3,4,5,6,7,8;0,6,0,6,0,6,0,6,0];
%Byangtiao8([4,6,3,1,7,9,15,11;0,9,11,15,15,7,15,12]);
%function Byangtiao8(p)
t=0:0.1:1;
hold on
for i=1:6
x=p(1,i)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p(1,i+1)*(1/6)*(3*t.^3-6*t.^2+4)...
+p(1,i+2)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p(1,i+3)*(1/6)*t.^3;
y=p(2,i)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p(2,i+1)*(1/6)*(3*t.^3-6*t.^2+4)...
+p(2,i+2)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p(2,i+3)*(1/6)*t.^3;
if (p(1,i) == i)
a = y;
a
end
%p(1,i)
plot(x,y,'k');
end
plot([p(1,1) p(1,2) p(1,3) p(1,4) p(1,5) p(1,6) p(1,7) p(1,8) p(1,9)],[p(2,1) p(2,2) p(2,3) p(2,4) p(2,5) p(2,6) p(2,7) p(2,8) p(2,9)]);
%Byangtiao8([4,6,3,1,7,9,15,11;0,9,11,15,15,7,15,12]);
%function Byangtiao8(p)
t=0:0.1:1;
hold on
for i=1:6
x=p(1,i)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p(1,i+1)*(1/6)*(3*t.^3-6*t.^2+4)...
+p(1,i+2)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p(1,i+3)*(1/6)*t.^3;
y=p(2,i)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p(2,i+1)*(1/6)*(3*t.^3-6*t.^2+4)...
+p(2,i+2)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p(2,i+3)*(1/6)*t.^3;
if (p(1,i) == i)
a = y;
a
end
%p(1,i)
plot(x,y,'k');
end
plot([p(1,1) p(1,2) p(1,3) p(1,4) p(1,5) p(1,6) p(1,7) p(1,8) p(1,9)],[p(2,1) p(2,2) p(2,3) p(2,4) p(2,5) p(2,6) p(2,7) p(2,8) p(2,9)]);
2)C代码:
#include "stdio.h"
#include "math.h"
#define RA 7
#define XM -9000
#define YM 0
#define N 6 /* 特征顶点个数 */
#include "math.h"
#define RA 7
#define XM -9000
#define YM 0
#define N 6 /* 特征顶点个数 */
void B3_curves(long xq[][9],int m,long lxx,long lyy)
{
int i,j,k=10;
double lx1,ly1;
double t0,t1,t2,t3;
/* 显示或绘之曲线 */
lx1=(xq[0][0]+4.0*xq[0][1]+xq[0][2])/6+lxx;
ly1=(xq[1][0]+4.0*xq[1][1]+xq[1][2])/6+lyy;
printf("i=%d,lx1 = %f, ly1 = %f\n", 0, lx1, ly1);
{
int i,j,k=10;
double lx1,ly1;
double t0,t1,t2,t3;
/* 显示或绘之曲线 */
lx1=(xq[0][0]+4.0*xq[0][1]+xq[0][2])/6+lxx;
ly1=(xq[1][0]+4.0*xq[1][1]+xq[1][2])/6+lyy;
printf("i=%d,lx1 = %f, ly1 = %f\n", 0, lx1, ly1);
for (i = 1; i < m - 1; i++)
{
for (j=0; j<=k-1; j++)
{
t3=1.0*j/k; t0=1-t3;
t0=t0*t0*t0/6.0; t1=((3.0*t3-6.0)*t3*t3+4.0)/6.0;
t2=(((3-3*t3)*t3+3)*t3+1)/6.0; t3=1.0-t0-t1-t2;
lx1=xq[0][i-1]*t0+xq[0][i]*t1+xq[0][i+1]*t2+xq[0][i+2]*t3+lxx;
ly1=xq[1][i-1]*t0+xq[1][i]*t1+xq[1][i+1]*t2+xq[1][i+2]*t3+lyy;
printf("i=%d,lx1 = %f, ly1 = %f\n",i, lx1, ly1);
}
}
{
for (j=0; j<=k-1; j++)
{
t3=1.0*j/k; t0=1-t3;
t0=t0*t0*t0/6.0; t1=((3.0*t3-6.0)*t3*t3+4.0)/6.0;
t2=(((3-3*t3)*t3+3)*t3+1)/6.0; t3=1.0-t0-t1-t2;
lx1=xq[0][i-1]*t0+xq[0][i]*t1+xq[0][i+1]*t2+xq[0][i+2]*t3+lxx;
ly1=xq[1][i-1]*t0+xq[1][i]*t1+xq[1][i+1]*t2+xq[1][i+2]*t3+lyy;
printf("i=%d,lx1 = %f, ly1 = %f\n",i, lx1, ly1);
}
}
int main(void)
{
static long p[2][9] = { 0, 1, 2, 3, 4, 5, 6, 7,
8,0,6,0,6,0,6,0,6,0};
static long q[9][2] = { 0, 1, 2, 3, 4, 5, 6, 7,
8, 0, 6, 0, 6, 0, 6, 0, 6, 0 };
{
static long p[2][9] = { 0, 1, 2, 3, 4, 5, 6, 7,
8,0,6,0,6,0,6,0,6,0};
static long q[9][2] = { 0, 1, 2, 3, 4, 5, 6, 7,
8, 0, 6, 0, 6, 0, 6, 0, 6, 0 };
B3_curves(p , N+2, 0, 0);
/* Return the system to text mode */
return 0;
}
/* Return the system to text mode */
return 0;
}
参考文献:
计算机图形学实验4-----Hermite Bezier B样条三种曲线的绘制
http://wenku.baidu.com/link?url=ZV_gHUKC1bOLjq1aXl0uB4A6lAyZXu49rSD_6wQJ3kcjnE_l4DGwyDGZ2uhhK3jeIDwTTUjY1H5pjxBsBJJBFREU42J54a95j0mcdILRhWO
用c语言编程绘制二维三次b样条曲线
http://www.docin.com/p-812882606.html
Matlab 画二次及三次Bezier曲线,8控制点的B样条曲线
http://wenku.baidu.com/view/e7cc6548767f5acfa1c7cde4.html 0 0
- B样条绘制
- 绘制B样条曲线
- OpenGL:绘制B样条曲线
- OpenGL: 绘制B样条曲线
- MATLAB绘制B样条曲线
- 如何绘制三次B样条曲线
- MATLAB绘制B样条曲线
- B样条曲线的绘制
- B样条曲线
- B样条曲线
- B样条曲线
- B样条曲线
- B样条曲线
- B样条曲线
- B样条函数
- B样条曲线
- B样条函数
- B-样条曲线:定义
- 爬虫Spider
- Android之路
- 写一个函数,计算4 000 000 000 以内的最大的那个f(n)=n的值
- Java 中的成员内部类
- lock synchronized 区别
- B样条绘制
- zoj 3460 Missile 【二分 + 二分图匹配】 【经典建模】 【二分 + 最大流】
- Ubuntu下搭建FTP服务器
- hdoj 最简单的计算机
- UITableView 刷新某一个cell 或 section
- 宽带离网用户分析(1) 任务介绍
- UVA10790上下俩条线段上的点最多形成线段交点
- vRedHat Enterprise Linux 6.4使用Centos 6 的yum源
- HDU 1789 Doing Homework again 【队列+贪心】