计算机图形学代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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); } 四、实验结果抓图与分析 实验三、二维图形的几何变换 一、实验内容 以一条直线段为例,完成目标的平移、绕任一点旋转。(缩放等其它变换选做)