计算机图形学 曲线的生成 实验报告

更新时间:2023-11-26 01:54:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验五

课程名称:计算机图形学 实验名称:曲线的生成 实验日期:2016/04/20 班级:

姓名:

学号

仪器编号:pc

一、 实验目的和要求

1、掌握B样条曲线的定义生成算法。

2、了解掌握曲面的生成算法,包括孔斯曲面、Bezier曲面、B样条曲面。

二、 实验内容

1、已知空间四点P0(-40.0,-40.0,0.0)、P1(-10.0,200.0,0.0)、P2(10.0,-200.0,0.0)、P3(40.0,40.0,0.0),参照上次Bezier曲线的程序并根据B样条曲线的定义绘制三次B样条曲线,并可修改线宽和颜色。 2、参照曲线生成方法,求xc=[1,1,2,1;4,4,4,4;7,6,7,8;10,9,10,9;]; yc=[1,3,6,9;0,3,6,10;0,3,6,9;1,4,7,10;]; zc=[3,5,5,2;4,6,7,4;4,7,6,5;2,4,5,4];构造的曲面,双三次Bezier曲面或双三次B样条曲面任选一个做。 提高题:(1)对上面的题目,实现已知控制点可以由用户自行输入。

(2)根据所学的曲面知识,编程绘制一个简单的带曲面的物品,自己设计并绘制。

三、 实验步骤

BEZk,n(t) = C(n, k)*tk*(1-t)n-k

可以得到三次Bez的基函数为 Bez1 = (1-t)3 = 1 – 3t + 3*t2 - t3 Bez2 = 3t(1-t)2 = 0 + 3t – 6*t2 + 3*t3 Bez3 = 3t2(1-t) =0 + 0 + 3*t2+ 3*t3 Bez4 = t3 = 0 + 0 + 0 + t3

//矩阵形式 t0 1 -3 3 -1 t1 0 3 -6 3 t2 0 0 3 -3 t3 0 0 0 1

四、程序清单

CPen penSolid(PS_SOLID,1,RGB(0,200,0));

CPen penRed(PS_SOLID,1,RGB(0,0,255)); CPen *pOldPen=NULL;

pOldPen=pDC->SelectObject(&penSolid);

/*graph location in screen&input matrix data file*/ w1=-320, w2=130,h1=-110; h2=479*(w2-w1)/639+h1; aa=639/(w2-w1); bb=479/(h2-h1);

read_data();/*read data to matrices x,y,z*/ /*creat matrices f&ft*/

f[0][0]=-1;f[0][1]=3;f[0][2]=-3;f[0][3]=1; f[1][0]=3;f[1][1]=-6;f[1][2]=3;f[1][3]=0; f[2][0]=-3;f[2][1]=0;f[2][2]=3;f[2][3]=0; f[3][0]=1;f[3][1]=4;f[3][2]=1;f[3][3]=0; for(i=0;i<4;i++) { for(j=0;j<4;j++)

{ ft[i][j]=f[j][i];}}/*creat axonometric transform matrix vv */ //*creat unit matrix*/ creat_unit_matrix(); th=pi/4;z0=2;

rota_x_y_z();/*rotate about z_axis*/ mult_matrix(); th=-0.73452;z0=0;

rota_x_y_z();/*rotate about x_axis*/

mult_matrix();th=pi;z0=0;rota_x_y_z();mult_matrix();th=-pi/2;z0=1;rota_x_y_z(); mult_matrix();th=-pi;z0=2;rota_x_y_z();mult_matrix(); for(i=0;i<4;i++) for(j=0;j<4;j++)

vv[i][j]=v[i][j];/*find the components of the product of matrix f&p&ft*/ for(kk=0;kk<3;kk++) { for(i=0;i<4;i++) for(j=0;j<4;j++) v[i][j]=f[i][j];

for(i=0;i<4;i++) for(j=0;j<4;j++) {switch(kk){

case 0:a[i][j]=x[i][j];break; case 1:a[i][j]=y[i][j];break; case 2:a[i][j]=z[i][j];break; default:break; }}

五、实验体会

1.上一个实验的动态绘制在交作业前都没有成功,这一周终于能够动态绘制曲线了。 2.三次B样条曲线的控制四点填入x[4]y[4]时不知道为什么就在生成面外。 3.部分曲面可以完成按下键盘上“上”、“下”、“左”、“右”箭头可观看曲面生成效果。 4.这次作业除了基本的推理演算外学习了很多网络上的编程方式,个人觉得提高很多。

本文来源:https://www.bwwdw.com/article/b6kt.html

Top