实验三 、 三次B样条曲线生成
自由曲线与曲面CAD系统占有重要的地位,由于其数学原理比较复杂,一般学生理解较为困难。因此,让学生自己动手编制程序生成曲线对其理解自由曲线和曲面就非常重要。B样条曲线由于其有非常好的性能,是一种非常典型自由曲线,因此,本实验选用它作为实验对象。 一、实验目的:
1、掌握参数化曲线曲面的原理和方法。
2、理解参数化曲线曲面的基本性质,特别是B样条曲线的基本性质。 3、掌握型值点和控制顶点以及控制多边形的概念,理解控制点对曲线的控制作用。
二、实验要求
在二维模式下,用自编程序生成三次B样条曲线。四个控制顶点的坐标可由用户任意输入。三次B样条曲线和控制多边形必须同时显示在显示器上。用户改变控制点后,曲线应同时得到调整。 三、实验设备 1.计算机系统
2.安装Turbo C或其他C语言集成开发工具 四、实验原理 1、B样条曲线原理
B样条曲线是一种基函数为B样条基函数的参数曲线,三次B样条参数方程如下:
- 12 -
???P(t)=(J0,3(t) J1,3(t) J2,3(t) J3,3(t))????p0???1??p1??33 2
=(t t t 1)??3p2?????1p3??3?630?33001??0?0??0?????????p0??p1? ?p2?p3??其中参数t∈[0,1]
P0、P1、P2、P3为四个控制顶点。B样条曲线是一种逼近曲线,曲线并不过任一个控制顶点。 2、编程基本要领
1)、将显卡设置为图形模式函数为 #include(graphics.h) #include(conio.h) main( )
{ int driver,mode;
driver=VGA; mode=VGAMED; initgraph(&driver,& mode,””); }
2) 画直线函数为 line(x1,y1, x2,y2) 3) 1*4界矩阵相乘函数 float py [4],xz[4][4];m [4] float xc(a,b) float a [4],b[4][4]; { int i , j,k;
for(i=0;i<=3;i++) for (j=0;j<=3;j++)
- 13 -
m[i] = m[i] + a[j] * b[j][i]; }
4)参数取值
参数步长一般采用等步长,取1/n ,n为正整数。N的大小与显卡和显示精度有关。一般可取50。 五、注意事项
P(t)、P0、P1、P2、P3都是绝对矢量,二维模式有x,y两个分量。因此,必须利
用上述方程分别求出。
???Px(t)=(J0,3(t) J1,3(t) J2,3(t) J3,3(t))????p0???1??p1??33 2
=(t t t 1)??3p2?????1p3??3?630?33001??0?0??0???x0??x1?x?2?x?3???? ???
???Py(t)=(J0,3(t) J1,3(t) J2,3(t) J3,3(t))????p0???1??p1??33 2
=(t t t 1)??3p2?????1p3??3?630?33001??0?0??0?????????y0??y1?y2??y3??
六、实验步骤
1、在C语言集成开发工具的编辑器中输入源程序 2、利用编译器编译源程序
3、连接生成执行文件 4、执行程序
#include
- 14 -
#include
float AX,AY,BX,BY,CX,CY,DX,DY; double XX[1001],YY[1001]; void getin()
{printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\}
void putout(int a) {int driver,mode; int m;
driver=VGA; mode=VGAMED; registerbgidriver(EGAVGA_driver); initgraph(&driver,&mode,\ setcolor(YELLOW);
- 15 -

