好文档 - 专业文书写作范文服务资料分享网站

计算机图形学,直线,圆,二维变换

天下 分享 时间: 加入收藏 我要投稿 点赞

实验一、直线的生成

实验目的:

1、掌握DDA直线画法、中点画线法和Bresenham画线法 2、掌握VC++简单程序设计方法

实验容:

根据提供的程序框架,修改部分代码,完成画一条直线的功能(中点画线法或者Bresenham画线法任选一),只要现在第一象限的直线。

实验步骤和方法:

首先启动Visual C++ 6.0(注意,其它版本程序无确编译),文件(file)→打开工作空间(open workspace)。打开 实验12用基本图形生成\\基本图形生成.dsw。在fileview窗口,source file下,双击 直线生成view.cpp,或者classview窗口下,cmyview类下相应的函数,按注释改写下列函数: void CMyView::OnDdaline() (此为DDA生成直线)

void CMyView::OnBresenhamline()(此为Bresenham画直线) void CMYView::OnMidPointLine()(此为中点画线法)

程序代码说明:

1、直线的两个端点,由对话框输入,给定程序已经完成输入代码。

2、SetPixel的用法:

COLORREF SetPixel(int x, int y, COLORREF crColor);//x,y为坐标点。 COLORREF SetPixel(POINT point, COLORREF crColor);//point为坐标点。

3、本实验事先提供DDA话直线的函数示(红色部分是重点,其它部分可以不看)中点画直线函数和BresenHam画直线函数由同学们参照dda直线的示例函数自己完成。

//以下为DDA画直线的源程序 float x,y,dx,dy,k; dx=(float)(xb-xa); dy=(float)(yb-ya);

k=dy/dx;

x=xa; y=ya;

if(abs(k)<1) { for (x=xa;x<=xb;x++) { pdc->SetPixel(x, int(y+0.5),COLOR); y=y+k; } }

if(abs(k)>=1) { for(y=ya;y<=yb;y++) { pdc->SetPixel(int(x+0.5),y,COLOR); x=x+1/k; } }

//DDA画直线结束

//以下为中点画直线的源程序

float a,b,d1,d2,d,x,y;

a=ya-yb,b=xb-xa,d=2*a+b; d1=2*a,d2=2*(a+b); x=xa,y=ya;

pdc->SetPixel(x,y,COLOR); while(x

{x++,y++,d+=d2;} else {x++,d+=d1;}

pdc->SetPixel(x,y,COLOR); }

//中点画直线结束

//以下为Bresenham画直线的源程序

int i,s1,s2,interchange;

float f,x,y,deltax,deltay,temp; x=xa; y=ya;

deltax=abs(xb-xa); deltay=abs(yb-ya); if(xb-xa>=0)

s1=1;else s1=-1; if(yb-ya>=0)

s2=1;else s2=-1; if(deltay>deltax) { temp=deltax; deltax=deltay; deltay=temp; interchange=1; }

else interchange=0; f=2*deltay-deltax;

pdc->SetPixel(x,y,COLOR); for(i=1;i<=deltax;i++) { if(f>=0){

if(interchange==1) x+=s1; else y+=s2;

pdc->SetPixel(x,y,COLOR); f=f-2*deltax; } else {

if(interchange==1) y+=s2; else x+=s1; f=f+2*deltay; } } }

//Bresenham画直线结束

实验二、圆的生成(中点和Bresenham法)

实验目的:

1、掌握bresenham画圆的算法。 2、掌握VC++简单程序设计方法

实验容:

根据提供的程序框架,修改部分代码,用Bresenham和中点画圆法画一段圆弧或者画圆。

实验步骤和方法:

同实验一,修改下列函数:

void CMyView::OnBresenhamCircle() void CMyView::OnMidpointCircle()

程序代码说明:

1、圆的圆心为原点,半径为给定参数,由函数编写时给定,不要求人机交换。

//以下请同学们自己编写画圆函数 int x,y; int c=0; float d; x=0;y=radius;d=1.25-radius;

pdc->SetPixel((x0+x),(y0+y),c); pdc->SetPixel((x0-x),(y0+y),c); pdc->SetPixel((x0+x),(y0-y),c); pdc->SetPixel((x0-x),(y0-y),c); pdc->SetPixel((x0+y),(y0+x),c); pdc->SetPixel((x0-y),(y0+x),c);

计算机图形学,直线,圆,二维变换

实验一、直线的生成实验目的:1、掌握DDA直线画法、中点画线法和Bresenham画线法2、掌握VC++简单程序设计方法实验容:根据提供的程序框架,修改部分代码,完成画一条直线的功能(中点画线法或者Bresenham画线法任选一),只要现在第一象限的直线。实验步骤和方法:首先启动VisualC
推荐度:
点击下载文档文档为doc格式
0ejwk1k08j553973044s2xc786b4a900yvt
领取福利

微信扫码领取福利

微信扫码分享