《计算机图形学》实验报告
实验 2:直线的生成
姓
学
班
名 :
号 :
级 :
实 验 地 点 :
实 验 时 间 :
《计算机图形学》实验报告
1. 实验目的和要求
理 解 直 线 生 成 的 原 理 ; 掌 握 典 型 直 线 生 成 算 法 ; 掌 握 步
处 理 、 分 析 实 验 数 据 的 能 力 ;
编 程 实 现 DDA 算 法 、Bresenham 中 点 算 法 ;对 于 给 定 起 点
和 终 点 的 直 线 , 分 别 调 用 DDA 算 法 和 Bresenham 中 点 算 法 进
行 批 量 绘 制 , 并 记 录 两 种 算 法 的 绘 制 时 间 ; 利 用 excel 等 数
据 分 析 软 件 , 将 试 验 结 果 编 制 成 表 格 , 并 绘 制 折 线 图 比 较 两
种 算 法 的 性 能 。
2. 实验环境和工具
开 发 环 境 : Visual C++ 6.0
实 验 平 台 : Experiment_Frame_One
3. 实验结果
3.1 程 序 流 程 图
(1) DDA 算 法
《计算机图形学》实验报告
(2) Mid_Bresenham 算 法
3.2 程 序 代 码
1、DDA 算 法
int y1)
{
void CExperiment_Frame_OneView::DDA(int x0, int y0, int x1,
//----------请 实 现 DDA 算 法 ------------//
int dx,dy,eps1,k;
《计算机图形学》实验报告
float x,y,xIncre,yIncre;
dx=x1-x0;
dy=y1-y0;
x=x0;
y=y0;
if(abs(dx)>abs(dy))//k 小 于 1
{
eps1=abs(dx);
}
else
{
Yincre=k
yincre=1
取 整
}
}
for(k=0;k<=eps1;k++)
{
x+=xIncre;
y+=yIncre;
2、Mid_Bresenham 算 法
int y0, int x1, int y1)
{
eps1=abs(dy);//k 大 于 1
}
xIncre=(float)dx/(float)eps1;//k 小 于 时 xincre=1
yIncre=(float)dy/(float)eps1;//k 大 于 等 于 时 xincre=1/k
DrawPixel(int(x+0.5),(int)(y+0.5));// 四 舍 五 入 int 向 下
void CExperiment_Frame_OneView::Mid_Bresenham(int x0,
//-------请 实 现 Mid_Bresenham 算 法 -------//
int dx,dy,d,UpIncre,DownIncre,x,y;
if(abs(x0-x1)>abs(y0-y1))//k 小 于 1
{
if(x0>x1)
{
x=x1;
x1=x0;
x0=x;
y=y1;
y1=y0;
y0=y;
}
x=x0;
y=y0;
dx=x1-x0;
《计算机图形学》实验报告
dy=y1-y0;
d=dx-2*dy;
UpIncre=2*dx-2*dy;
DownIncre=-2*dy;
while(x<=x1)
{
DrawPixel(x,y);
x++;
if(d<0)
{
y++;
d+=UpIncre;
d+=DownIncre;
}
else
{
}
if(y0>y1)
}
}
else
{
{
x=x1;
x1=x0;
x0=x;
y=y1;
y1=y0;
y0=y;
}
x=x0;
y=y0;
dx=x1-x0;
dy=y1-y0;
d=2*dx-dy;
UpIncre=2*dx;
DownIncre=2*dx-2*dy;
while(y<=y1)
{
DrawPixel(x,y);
y++;
if(d<0)
{
d+=UpIncre;
}
else
{
d+=DownIncre;
《计算机图形学》实验报告
x++;
}
}
}
}
3.3 运 行 结 果
(1) DDA 算 法
(2) Mid_Bresenham 算 法
3.4 运 行 结 果 分 析
DDA 算 法 直 观 ,实 现 简 单 。但 是 涉 及 浮 点 数 运 算 ,不 利 于 硬 件 实
现 。 Mid_Bresenham 算 法 比 DDA 算 法 简 单 。两 种 算 法 实 现 生 成 的
直 线 也 可 能 会 有 不 同 。
《计算机图形学》实验报告
4. 思考题
如 何 测 试 算 法 的 性 能 ?
因 为 绘 制 1 条 直 线 时 间 很 短 , 所 以 需 要 绘 制 大 量 直 线 才 能 比 较 它
们 之 间 的 性 能 。 drawpixel 需 要 耗 费 时 间 , 但 它 的 时 间 性 能 和 直 线 绘
制 算 法 无 关 , 因 此 在 比 较 不 同 算 法 性 能 时 , 应 该 屏 蔽 它 的 影 响 。 即 单
独 计 算 drawpixel 的 次 数 或 时 间 。 一 次 性 绘 制 大 量 直 线 , 并 减 去
drawpixel 所 用 时 间 , 对 算 法 性 能 进 行 对 比 。
5. 实验心得
在 本 次 实 验 中 我 学 习 并 且 掌 握 了 上 述 所 说 的 两 种 直 线 扫 描 算 法 ,
同 时 也 知 道 了 两 种 算 法 的 实 现 原 理 以 及 他 们 各 自 的 实 现 过 程 , 并 且 大
致 了 解 了 两 种 扫 描 算 法 的 优 势 与 劣 势 所 在 。
《计算机图形学》实验报告
实验 3:多边形扫描转换算法
姓
学
班
名 :
号 :
级 :
实 验 地 点 :
实 验 时 间 :