计算机图形学代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

四、实验结果抓图与分析

1、目标的平移的源程序

2、绕任意点旋转的源程序

实验一、直线的生成

一、实验内容

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

二、算法原理介绍

双击直线生成.dsw打开给定的程序,或者先启动VC++,文件(file)→打开工作空间(open workspace)。打开直线生成view.cpp,按注释改写下列函数:

1.void CMyView::OnDdaline() (此为DDA生成直线)

2.void CMyView::OnBresenhamline()(此为Bresenham画直线)

3.void CMYView::OnMidPointLine()(此为中点画线法)

三、程序源代码

1.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画直线结束

}

2.Bresenham画直线源程序:

float b,d,xi,yi;

int i;

float k;

k=(yb-ya)/(xb-xa);

b=(ya*xb-yb*xa)/(xb-xa);

if(k>0&&k<=1)

for(i=0;i

{ d=ya+0.5-k*(xa+1)-b;

if(d>=0)

{ xi=xa+1;

yi=ya;

xa++;

ya=ya+0.5;

}

if(d<0)

{ xi=xa+1;

yi=ya+1;

xa++;

ya=ya+1.5;

}

pdc->SetPixel(xi,yi,COLOR); }

//BresenHam画直线结束}

3.中点画线法源程序:

float b,d,xi,yi;

int i;

float k;

k=(yb-ya)/(xb-xa);

b=(ya*xb-yb*xa)/(xb-xa);

if(k>0&&k<=1)

for(i=0;i

{ d=ya+0.5-k*(xa+1)-b;

if(d>=0)

{ xi=xa+1;

yi=ya;

xa++;

ya=ya+0.5;

}

if(d<0)

{ xi=xa+1;

yi=ya+1;

xa++;

ya=ya+1.5;

}

pdc->SetPixel(xi,yi,COLOR); }

//BresenHam画直线结束}

四、实验结果抓图与分析

1、DDA生成直线

2、Bresenham画直线

3、中点画线法

实验二、bresenham画圆

一、实验内容

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

二、算法原理介绍

双击experiment.dsw打开,或者先启动VC++,文件(file)→打开工作空间(open workspace)。打开直线生成view.cpp,按注释改写下列函数:

void CMyView::OnBresenhamCircle()

三、程序源代码

bresenham画圆源程序

void Bresenhan_circle()

;int x,y=180,color=1,xcenter,ycenter;x=0;

int d=3-2*180;

while(x

{

if(d<0){d=d+4*x+6;x=x+1;}

else{d=d+4*(x-y)+10;x=x+1;y=y-1;}

pdc->SetPixel(0+x,0+y,COLOR);

pdc->SetPixel(0+x,0-y,COLOR);

pdc->SetPixel(0-x,0+y,COLOR);

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

pdc->SetPixel(0+y,0+x,COLOR);

pdc->SetPixel(0+y,0-x,COLOR);

pdc->SetPixel(0-y,0+x,COLOR);

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

}

四、实验结果抓图与分析

实验三、二维图形的几何变换

一、实验内容

以一条直线段为例,完成目标的平移、绕任一点旋转。(缩放等其它变换选做)

相关文档
最新文档