计算机图形学DDA画线算法及具体程序实现

更新时间:2023-05-14 15:07:01 阅读量: 实用文档 文档下载

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

计算机图形学DDA画线算法及具体程序实现

数学与软件科学学院 实验报告

学期: 2010 至 2011 第 一 学期 2010年 9月20 日 课程名称: 计算机图形学 专业:信息与计算科学 2007级5班 实验编号: 01 实验项目: DDA画线 指导教师 庞朝阳 姓名: 学号:200706005 实验成绩:

一、实验目的及要求

1) 理解直线的生成算法; 2) 掌握直线生成算法——数值微分(DDA)法,并用C++程序实现;

二、实验内容

1) 用C++实现DDA画线程序;

2) 用C++实现按y=ax+b画直线;

3) 每个取10万次循环,对比运行时间。

三、主要仪器设备及软件环境

1) 计算机;

2) Vc++6.0。

四、具体实验内容:

1.算法的基本思想:

已知过端点P0(x0,y0)和P1),斜率为 0,P1 x1,y1 的直线段L(P

k=y1 y0. x1 x0

画线过程:从x的左端点x0开始,向x右端点步进,步长=1(像

素),计算y=ax+b,取像素点(x,round(y))作为当前点的坐标, 计算 yi 1 kxi 1 b kxi b k x;

若令 x 1 ,则 yi 1 yi k,即当x每递增1,y递增k。

综上,DDA算法的本质在于利用数值方法解微分方程,通过同时对x和y各增加一个小增量,计算下一步的x,y值。

2. DDA算法的优缺点

计算机图形学DDA画线算法及具体程序实现

优点:与基本算法相比,在扫描过程中减少了浮点运算,提高了效率。 缺点:由于x与dx,y与dy必须用浮点来表示,且每一步都要进行四

舍五入取整,不利于硬件实现,故效率有待提高。

3.程序代码

#include <iostream>

#include "math.h"

#define TRUE 1

using namespace std;

class DDA

{

public:

void DDALine(int x0,int y0,int x1,int y1,COLORREF color, CDC *pDC)

{

float dx, dy, length, x, y;

if(abs(x1-x0) >= abs(y1-y0))

length = abs(x1-x0);

else

length = abs(y1-y0);

dx = (x1-x0)/length;

计算机图形学DDA画线算法及具体程序实现

dy = (y1-y0)/length;

int i = 1;

x = x0;

y = y0;

while(i<=length)

{

pDC->SetPixel((int)(x+0.5),(int)(y+0.5),color); x = x + dx;

y = y + dy;

i++;

}

}

}

4.程序结果:

计算机图形学DDA画线算法及具体程序实现

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

Top