-
《计算机图形学》实验报告
《计算机图形学》实验报告
姓
名:
学
号:
班
级:
实验地点:
实验时间:
郭子玉
2012211632
计算机
12-2
班
逸夫楼
507
15.04.10
15.04.17
《计算机图形学》实验报告
实验一
1
实验目的和要求
理
< br>解
直
线
生
成
的
原
理
;
掌
握
典
型
直<
/p>
线
生
成
算
法
;掌
握
步
处
理
、分
析
实
验
数
据
的
能
力
;
编
程
实
现
DDA
算
法
、
Bresenham
中
点
算
法
;
对
于
给
定
起
点
和
终
点
的
直
线
,
分<
/p>
别
调
用
DDA<
/p>
算
法
和
Bres
enham
中
点
算
法
进
行
批
量
绘
制
,
并<
/p>
记
录
两
种
算
法
的
绘
制
时
间
;
利
用
excel
等
数
据
分
析
软
件
,
将
试
验
结
果
编
制
成
表
格<
/p>
,
并
绘
制
折
线
图
比
较
两
种
算
法
的
性
能
。
2
实验环境和工具
开
< br>发
环
境
:
Visual C++ 6.0
实
验
平
台
:
Experiment_Fr
ame_One
(
自
制
平
台
)
3
实验结果
3.1
程序流程图
(
1
)
DDA
算
法
K<=1
计
算
k
,
b
开
始
是
否
否
x<=X1
y<=Y1
是
是
x=x+1;y=y+k;
结
束
y=y+1;x=x+1/k;
绘
点
绘
点
《计算机图形学》实验报告
(
2
)
Mid_Bresenham
算
法
dx>dy
计
算
dx,dy
开
始
是
否
D=dx-2*dy
D=dy-2*dx
否
<
br>------------------------------// 法
x
y
是
是
绘
点
D<0
D<0
结
束
绘
点
是
否
是
否
y=y+1
;
D = D +
-
2*dy;
x=x+1;
D
=
D
-
2*dy;
x=x+1;
x=x+1
;
D = D +
2*dy
2*dx;
y=y+1;
-
D
=
D
-
2*dx;
y=y+1;
2*dx
《计算机图形学》实验报告
3.2
程序代码
//-------------------------
算法实现
//<
/p>
绘制像素的函数
DrawPixel(x, y);
(1)DDA
算
void
CExperiment_Frame_OneView::DDA(int X0, int Y0, int
X1, int Y1)
{
//-
---------
请实现
DDA
算法
------------//
float k, b;
float d;
k = float(Y1 -
Y0)/float(X1 - X0);
b = float(X1*Y0
- X0*Y1)/float(X1 - X0);
if(fabs(k)<= 1)
{
if(X0 > X1)
{
}
int temp = X0;
X0 = X1;
X1 = temp;
《计算机图形学》实验报告
}
int x;
float y;
x = (int)X0;
y = (float)Y0;
while(x <= X1)
{
}
DrawPixel(x, round(y));
x
++;
y = y + k;
else
{
if(Y0 > Y1)
{
}
float x;
int y;
x
= (float)X0;
y = (int)Y0;
while(y <= Y1)
int temp = Y0;
Y0 = Y1;
Y1 = temp;
《计算机图形学》实验报告
}
}
{
}
DrawPixel(round(x), y);
y
++;
x = x + 1/k;
return;
(
2
)
Mid_Br
esenham
算
法
void
CExperiment
_Frame_OneView::Mid_Bresenham(int
X0,
int Y0, int X1, int Y1)
{
//-------
请实现
Mid_Bresenham
算法
-------//
int D;
int
dx, dy;
int x, y;
dx = X1 -
X0;
dy = Y1 - Y0;
x = X0;
y = Y0;
if(dx > dy)
{
《计算机图形学》实验报告
}
D
= dx - 2*dy;
while(x <= X1)
{
}
DrawPixel(x, y);
if(D < 0)
{
}
else
{
}
x++;
D = D - 2*dy;
y = y +1;
D = D + 2*dx - 2*dy;
else
{
D = dy - 2*dx;
while(y <=
Y1)
{
DrawPixel(x,
y);
if(D < 0)
{
《计算机图形学》实验报告
}
}
}
}
x
= x +1;
D = D + 2*dy - 2*dx;
else
{
}
y++;
D = D - 2*dx;
return;
3.3
运行结果
(1)DDA
算
法
《计算机图形学》实验报告
(
2
)
Mid_Bresenham
算
法
3.4
运行结果分析
DDA
算法直观,实现简单。但是涉及浮点数运算,不
利于硬件实现。
Mid_Bresenham
算
法比
< br>DDA
算法简
单。两
种算法实现
生成的直线也可能会有不同。
4
实验心得
通过实
验,学习掌握了两种直线的扫描转换算法。不同方
法
有
不
同
的
优
点
,
实
现
< br>结
果
也
有
可
能
不
同
。
需
要
通
过
p>
比
较
,
确定哪种方
法更优,更符合正确结果。
-
-
-
-
-
-
-
-
-
上一篇:英语选择和填空
下一篇:学习英语发音应该学习国际音标还是自然拼读