计算机图形学-直线生成算法实验报告
时间:2020-09-21 12:24:43 来源:工作范文网 本文已影响 人
1 -
湖南工商大学课程实验报告
(注:本实验报告文件请以自己的学号姓名为文件名,保存关闭后提交)
课程名 计算机图形学 班级 计科16xx 学号1609xxxxx 姓名 宋x
实验名称 直线生成算法
实验目的
理解三种直线生成算法思想;
写出实现程序;
实验步骤
建立一个DDALine的工程文件;
添加ddaline()成员函数;
编写自定义的成员函数ddaline()程序;
编写OnDraw()函数;
编译、调试和运行程序,程序结果如下。同时尝试画几条不同颜色的直线;
参照以上方法自行完成中点画线法和Bresenham法生成直线的算法程序。
实验代码
DDA算法程序(任意斜率):
void CTestView::ddaline(CDC *pDC, int x0, int y0, int x1, int y1, COLORREF color)
{
float x,y,dx,dy;
int i,length;
if(abs(x1-x0)>abs(y1-y0))
length=abs(x1-x0);
else
length=abs(y1-y0);
dx=(float)(x1-x0)/length; //这里一定要转化为实型
dy=(float) (y1-y0)/length;
x=x0;
y=y0;
for(i=1;i<=length;i++)
{
pDC->SetPixel(int(x+0.5),int(y+0.5),color);
x=x+dx;
y=y+dy;
}
}
中点画线算法(斜率0<k<1):
void CTestView::MidpointLine(CDC *pDC, int x0, int y0, int x1, int y1, int color)
{
int a,b,delta1,delta2,d,x,y;
a=y0-y1;
b=x1-x0;
d=2*a+b;
delta1=2*a;
delta2=2*(a+b);
x=x0;
y=y0;
pDC->SetPixel(x,y,color);
while(x<x1)
{
if(d<0)
{
x++;
y++;
d+=delta2;
}
else
{
x++;
d+=delta1;
}
pDC->SetPixel(x,y,color);
}
}
OnDraw函数:
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
ddaline(pDC,30,30,400,300,RGB(59,207,237));
MidpointLine(pDC,100,100,500,200,RGB(0,0,255));
}
实验结果截图