《计算机图形学》实验指导书.docx
《《计算机图形学》实验指导书.docx》由会员分享,可在线阅读,更多相关《《计算机图形学》实验指导书.docx(9页珍藏版)》请在冰豆网上搜索。
《计算机图形学》实验指导书
《计算机图形学》实验指导书
实验一:
二维基本图元的生成
1、实验目的:
参照Windows的画笔或Office中的绘图模块设计学会自己编程实现二维基本图元的生成。
实现二维基本图元直线段生成的DDA算法,中点算法、Bresenham算法。
2、实验内容:
用数值微分DDA算法、中点算法、Bresenham算法扫描转换直线段(20,10)--(30,18)
3、实验要求:
1)写出扫描转换的结果
2)写出每一步递推过程的x,y坐标及判别式d的值
3)图示计算结果
4)考虑实现环境、编程语言和设计界面风格
5)用菜单或按钮调用方式实现每个基本算法
6)考虑界面的美观,扩展,人机交互等因素
7)调试程序,验证算法的正确性
8)提交实验报告
4、参考:
教材,开发平台的联机帮助。
演示参考:
DDA算法:
斜率k=(5-1)/(5-0)=0.8
x y y+0.5 int(y+0.5)
0 1 1.5 1
1 1.8 2.3 2
2 2.6 3.1 3
3 3.4 3.9 3
4 4.2 4.7 4
5 5.0 5.5 5
中点算法:
a=y0-y1=-4;b=x1-x0=5; d0=2a+b=-3;d1=2a=-8;d2=2(a+b)=2;
x y d 说明
0 1 -3
1 2 -1; d<0, d+d2
2 3 1; d<0,d+d2
3 3 -7; d>0, d+d1
4 4 -5; d<0, d+d2
5 5 -3; d<0, d+d2
结果图示:
实验二:
写一个画带线宽的程序。
1、实验目的:
参照Windows的画笔或Office中的绘图模块设计学会自己编程实现二维基本图元的生成
2、实验内容:
实现对线宽的属性的控制
3、实验步骤:
1)考虑实现环境、编程语言和设计界面风格
2)调用菜单或按钮调用方式实现每个基本算法
3)考虑界面的美观,扩展,人机交互等因素
4)键盘输入直线的两个端点坐标及线宽的倍数,调用算法实现
5)调试程序,验证算法的正确性
6)提交实验报告
4、参考:
教材,开发平台的联机帮助。
5、参考代码:
Draw_wide_dashed(intx0,inty0,intx1,inty1,intwidth,intcolor)
{
intj;
floatdx,dy,k,x,y,startx,starty;
dx=abs(x1-x0);
dy=abs(y1-y0);
k=dy/dx;
if(abs(k)<=1)//如果斜率不大于1,则x的增长大于y的增长。
{
startx=x0x0:
x1;
for(j=width;j>0;j++)
{ y=starty;//
for(x=startx;x {
drawpixel(x,int(y+0.5),color);
y=y+k;
};
starty=starty+1;//每次画一条宽为1的斜线时重新调整起点
startx=startx-1/k;
}
}
else
{
starty=y0y0:
y1;
for(j=width;j>0;j++)
{ x=startx;
for(y=starty;y {
drawpixel(int(x+0.5),y,color);
x=x+1/k;
};
startx=startx+1;
starty=starty-1/k;
}
}
}
实验三:
圆内接正n角星的绘制
1、实验目的:
制作简单的图形应用软件。
2、实验内容:
键盘输入不小于5的自然数n和半径R及r,
用两个同心圆生成五角星。
要求用线段与线段的求交计算
绘制以屏幕中心为圆心的内接正n角星。
3、实验要求:
1)两圆半径有如下关系:
R=2r
2)编程语言不限
3)注意界面设计
4)考虑算法的效率
5)提交实验报告
4、参考:
教材,开发平台的联机帮助。
实验四:
二维图形的填充
1、实验目的:
参照Windows的画笔或Office中的绘图模块设计学会自己编程实现二维图形的填充
2、实验内容:
实现二维多边形填充的扫描线算法
3、实验要求:
1)考虑实现环境、编程语言和设计界面风格
2)调用菜单或按钮调用方式实现每个基本算法
3)考虑界面的美观,扩展,人机交互等因素
4)对二维图形填充,由鼠标或键盘先定义填充区域,然后调用算法
5)提交实验报告
4、参考:
教材开发平台的联机帮助。
实验五:
二维图形的裁剪
1、实验目的:
参照Windows的画笔或Office中的绘图模块设计学会自己编程实现二维图形的裁剪
2、实验内容:
实现二维直线段裁剪的Cohen-Sutherland裁剪算法和中点分割裁剪算法
3、实验要求:
1)虑实现环境、编程语言和设计界面风格
2)菜单或按钮调用方式实现每个基本算法
3)虑界面的美观,扩展,人机交互等因素
4)二维图形裁剪,由鼠标或键盘先定义矩形窗口和被裁剪图形,然后调用算法
5)调试程序,验证算法的正确性
6)提交实验报告
4、参考:
教材,开发平台的联机帮助。
实验六:
图形变换
1、实验目的:
理解并会自己编程实现二维图形的变换
2、实验内容:
1)实现二维图形的平移变换
2)实现二维图形的放缩变换
3)实现二维图形的旋转变换
3、实验要求:
1)考虑实现环境、编程语言和设计界面风格
2)用菜单或按钮调用方式实现每个基本算法
3)考虑界面的美观,扩展,人机交互等因素
4)对二维图形变换的实现,可以考虑两种方式:
一是预先定义好被变换的图形,由鼠标或键盘输入变换参数,然后显示变换结果;二是可以对显示区域所在的任意图形实现变换(可以先在显示区域画图,再调用变换算法)
5)调试程序,验证算法的正确性
6)提交实验报告
4、参考:
教材,开发平台的联机帮助。
实验七:
曲线画图
1、实验目的:
理解并会自己编程实现二维Bezier曲线的画图
2、实验内容:
实现二维2、3、4阶Bezier曲线的描画
3、实验要求:
1)考虑实现环境、编程语言和设计界面风格
2)用菜单或按钮调用方式实现每个基本算法
3)考虑界面的美观,扩展,人机交互等因素
4)由下拉菜单或键盘输入决定Bezier曲线的阶数,由鼠标或键盘输入控制顶点的坐标,屏幕显示特征多边形,然后生成逼近它的相应的Bezier曲线
5)调试程序,验证算法的正确性
6)提交实验报告
4、参考:
教材,开发平台的联机帮助。
实验八:
改进中点画圆算法实现对圆域的填充
1、实验目的:
理解并会自己编程实现中点画圆算法及其对其填充
2、实验内容:
通过改进的中点算法实现对圆域的填充
3、实验要求:
1)考虑实现环境、编程语言和设计界面风格
2)用菜单或按钮调用方式实现基本算法
3)考虑界面的美观,扩展,人机交互等因素
4)由鼠标或键盘输入相应参数:
圆的半径,中点坐标,颜色,调用改进的中点画圆算法生成填充圆
5)调试程序,验证算法的正确性
6)提交实验报告
4、参考:
教材,开发平台的联机帮助。
实验九:
经消隐处理的凸多面体的任意方向视图的绘制
1、实验目的:
学习凸多面体的消隐处理。
2、实验内容:
只给出凸多面体顶点坐标
3、实验要求:
1)考虑实现环境、编程语言和设计界面风格
2)用菜单或按钮调用方式实现基本算法
3)考虑界面的美观,扩展,人机交互等因素
4)要求编制程序在荧光屏上尽可能大而不失真地绘制经过消隐处理的该凸多面体的任意选定方向下的正投影图。
5)调试程序,验证算法的正确性
6)提交实验报告
4、参考:
教材,开发平台的联机帮助。
实验十算法的改进
1、实验目的:
为提高算法的效率,实现快速光栅化算法
2、实验内容:
通过改进Bresenham算法,使之从两端同时对线进行光栅化,由此得到双倍的速度
3、实验要求:
1)考虑实现环境、编程语言和设计界面风格
2)用菜单或按钮调用方式实现基本算法
3)考虑界面的美观,扩展,人机交互等因素
4)由鼠标或键盘输入相应参数:
直线的端点坐标
5)调试程序,验证算法的正确性
6)提交实验报告
4、参考:
教材,开发平台的联机帮助。