辽工大自考实践矿业信息与计算机应用.doc
《辽工大自考实践矿业信息与计算机应用.doc》由会员分享,可在线阅读,更多相关《辽工大自考实践矿业信息与计算机应用.doc(12页珍藏版)》请在冰豆网上搜索。
辽宁工程技术大学自考机电设备
实验题目 二维基本图形生成的算法实现
实验日期指导教师成绩
一、实验目的
1、通过实验,进一步理解和掌握DDA和中点算法,Bresenham算法;
2、掌握DDA和中点算法,中点算法,Bresenham算法算法生成直线段的基本过程。
掌握中点画圆的算法。
3、通过编程,会在VC++环境下完成用DDA、中点算法实现直线段的绘制和中点算法实现圆的绘制。
二、实验内容
1、用DDA算法或中点(Besenham)算法实现直线段的绘制。
2、用中点(Besenham)算法实现椭圆或圆的绘制。
三、实验步骤
1、算法、原理清晰,有详细的设计步骤;
2、依据算法、步骤或程序流程图,用VC++语言编写源程序;
3、编辑源程序并进行调试;
4、进行运行测试,并结合情况进行调整;
5、对运行结果进行保存与分析;
6、打印源程序或把源程序以文件的形式提交;
7、按格式书写实验报告。
四、实验数据
1、用DDA算法实现直线段的绘制
实验源代码
voidCDDAView:
:
LineDDA(intx0,inty0,intx1,inty1,intcolor)
{
CDC*pDC=GetDC();
intx;
floatdy,dx,y,m;
dx=x1-x0;
dy=y1-y0;
m=dy/dx;
y=y0;
for(x=x0;x<=x1;x++)
pDC->SetPixel(x,(int)(y+0.5),color);
y+=m;
}
ReleaseDC(pDC);
ondraw调用:
OnDraw(CDC*pDC)
CDDADoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
LineDDA(50,55,500,120,123);
试验结果:
源代码:
voidCBesenhamView:
BresenhmaCircle(intxc,intyc,intr,intcolor)
intx=0,y=r,p=3-2*r;
while(x { pDC->SetPixel(xc+x,yc+y,color); pDC->SetPixel(xc-x,yc+y,color); pDC->SetPixel(xc+x,yc-y,color); pDC->SetPixel(xc-x,yc-y,color); pDC->SetPixel(xc+y,yc+x,color); pDC->SetPixel(xc-y,yc+x,color); pDC->SetPixel(xc+y,yc-x,color); pDC->SetPixel(xc-y,yc-x,color); if(p<0)p+=4*x+6; else{ p+=4*(x-y)+10; y--; } x++; } if(x==y) { pDC->SetPixel(xc+x,yc+y,color); pDC->SetPixel(xc-x,yc+y,color); pDC->SetPixel(xc+x,yc-y,color); pDC->SetPixel(xc-x,yc-y,color); pDC->SetPixel(xc+y,yc+x,color); pDC->SetPixel(xc-y,yc+x,color); pDC->SetPixel(xc+y,yc-x,color); pDC->SetPixel(xc-y,yc-x,color); } ReleaseDC(pDC);}ondraw函数调用:voidCBesenhamView::OnDraw(CDC*pDC){ CBesenhamDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); BresenhmaCircle(200,200,100,120); //TODO:adddrawcodefornativedatahere}试验结果:实验题目 图形的裁剪实验日期指导教师成绩一、实验目的1、通过实验,进一步理解和掌握Cohen_Sutherland裁剪算法;2、掌握用Cohen_Sutherland裁剪算法裁减多边形的基本过程3、通过编程,会在VC++环境下用Sutherland_Hogman算法编程实现用矩形窗口对的裁剪。二、实验内容用Cohen_Sutherland算法编程实现用矩形窗口对直线的裁剪。三、实验步骤1、算法、原理清晰,有详细的设计步骤;2、依据算法、步骤或程序流程图,用VC++语言编写源程序;3、编辑源程序并进行调试;4、进行运行测试,并结合情况进行调整;5、对运行结果进行保存与分析;6、打印源程序或把源程序以文件的形式提交;7、按格式书写实验报告。四、实验数据实验源代码voidCClipView::OnLButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault CDC*pDC=CWnd::GetDC(); //CView::OnLButtonDown(nFlags,point); Rectrect; intx,y; x=point.x; y=point.y; rect.xmin=x-100; rect.xmax=x+100; rect.ymin=y-100; rect.ymax=y+100;floatx0=0,y0=0,x1=400,y1=400;//DrawLine(x0,y0,x1,y1,pDC); Clip(x0,y0,x1,y1,&rect,pDC);ReleaseDC(pDC);}voidClip(floatx0,floaty0,floatx1,floaty1,Rect*rect,CDC*pDC){ boolaccept,done; accept=FALSE; done=FALSE; OutCodecode0,code1; OutCode*outCode; floatx,y; CompOutCode(x0,y0,rect,&code0); CompOutCode(x1,y1,rect,&code1); do{ if(code0.all==0&&code1.all==0){ accept=TRUE; done=TRUE; }elseif((code0.all&code1.all)!=0){ done=TRUE; }else{ if(code0.all!=0){ outCode=&code0; }else{ outCode=&code1; } if(outCode->left){ y=y0+(y1-y0)*(rect->xmin-x0)/(x1-x0); x=(float)rect->xmin; }elseif(outCode->top){ x=x0+(x1-x0)*(rect->ymax-y0)/(y1-y0); y=(float)rect->ymax; }elseif(outCode->right){ y=y0+(y1-y0)*(rect->xmax-x0)/(x1-x0); x=(float)rect->xmax; }elseif(outCode->bottom){ x=x0+(x1-x0)*(rect->ymin-y0)/(y1-y0); y=(float)rect->ymin; } if(outCode->all==code0.all){ x0=x; y0=y; CompOutCode(x0,y0,rect,&code0); }else{ x1=x; y1=y; CompOutCode(x1,y1,rect,&code1); } } }while(!done); if(accept){ DrawLine((int)x0,(int)y0,(int)x1,(int)y1,pDC,1); }}实验结果:实验题目 几何图形变换实验实验日期指导教师成绩一、实验目的1、通过实验,运用计算机图形学的知识、原理和算法;2、掌握二维和三维图形几何变换;3、通过使用VC++编程环境实现图形几何变换;二、实验内容1、在VC++编程环境下建立二维平面图形(长方形)实现其缩放、平移、旋转几何变换;2、在VC++编程环境下建立三维立方体,实现缩放、平移、旋转等几何变换,。三、实验步骤1、算法、原理清晰,有详细的设计步骤;2、依据算法、步骤或程序流程图,用VC++语言编写源程序;3、编辑源程序并进行调试;4、进行特殊模式的运行测试,并结合情况进行调整;5、对运行结果进行保存与分析;6、打印源程序或把源程序以文件的形式提交;7、按格式书写实验报告。四、实验数据1、实验源代码voidCJHBHView::OnDraw(CDC*pDC){ CJHBHDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); PY(pDC,x1,y1,x2,y2,Tx,Ty); BBI(pDC,x1,y1,x2,y2,Sx,Sy); XZ(pDC,x1,y1,x2,y2,a); //TODO:adddrawcodefornativedatahere}voidCJHBHView::PY(CDC*pDC,intx1,inty1,intx2,inty2,intTx,intTy){ intx3,y3,x4,y4; x3=x1+Tx; y3=y1+Ty; x4=x2+Tx; y4=y2+Ty; pDC->MoveTo(x1,y1); pDC->LineTo
pDC->SetPixel(xc+x,yc+y,color);
pDC->SetPixel(xc-x,yc+y,color);
pDC->SetPixel(xc+x,yc-y,color);
pDC->SetPixel(xc-x,yc-y,color);
pDC->SetPixel(xc+y,yc+x,color);
pDC->SetPixel(xc-y,yc+x,color);
pDC->SetPixel(xc+y,yc-x,color);
pDC->SetPixel(xc-y,yc-x,color);
if(p<0)p+=4*x+6;
else{
p+=4*(x-y)+10;
y--;
x++;
if(x==y)
ondraw函数调用:
CBesenhamDoc*pDoc=GetDocument();
BresenhmaCircle(200,200,100,120);
实验题目 图形的裁剪
1、通过实验,进一步理解和掌握Cohen_Sutherland裁剪算法;
2、掌握用Cohen_Sutherland裁剪算法裁减多边形的基本过程
3、通过编程,会在VC++环境下用Sutherland_Hogman算法编程实现用矩形窗口对的裁剪。
用Cohen_Sutherland算法编程实现用矩形窗口对直线的裁剪。
voidCClipView:
OnLButtonDown(UINTnFlags,CPointpoint)
Addyourmessagehandlercodehereand/orcalldefault
CDC*pDC=CWnd:
GetDC();
//CView:
OnLButtonDown(nFlags,point);
Rectrect;
intx,y;
x=point.x;
y=point.y;
rect.xmin=x-100;
rect.xmax=x+100;
rect.ymin=y-100;
rect.ymax=y+100;
floatx0=0,y0=0,x1=400,y1=400;
//DrawLine(x0,y0,x1,y1,pDC);
Clip(x0,y0,x1,y1,&rect,pDC);
voidClip(floatx0,floaty0,floatx1,floaty1,Rect*rect,CDC*pDC){
boolaccept,done;
accept=FALSE;
done=FALSE;
OutCodecode0,code1;
OutCode*outCode;
floatx,y;
CompOutCode(x0,y0,rect,&code0);
CompOutCode(x1,y1,rect,&code1);
do{
if(code0.all==0&&code1.all==0){
accept=TRUE;
done=TRUE;
}elseif((code0.all&code1.all)!
=0){
}else{
if(code0.all!
outCode=&code0;
outCode=&code1;
if(outCode->left){
y=y0+(y1-y0)*(rect->xmin-x0)/(x1-x0);
x=(float)rect->xmin;
}elseif(outCode->top){
x=x0+(x1-x0)*(rect->ymax-y0)/(y1-y0);
y=(float)rect->ymax;
}elseif(outCode->right){
y=y0+(y1-y0)*(rect->xmax-x0)/(x1-x0);
x=(float)rect->xmax;
}elseif(outCode->bottom){
x=x0+(x1-x0)*(rect->ymin-y0)/(y1-y0);
y=(float)rect->ymin;
if(outCode->all==code0.all){
x0=x;
y0=y;
x1=x;
y1=y;
}while(!
done);
if(accept){
DrawLine((int)x0,(int)y0,(int)x1,(int)y1,pDC,1);
实验结果:
实验题目 几何图形变换实验
1、通过实验,运用计算机图形学的知识、原理和算法;
2、掌握二维和三维图形几何变换;
3、通过使用VC++编程环境实现图形几何变换;
1、在VC++编程环境下建立二维平面图形(长方形)实现其缩放、平移、旋转几何变换;
2、在VC++编程环境下建立三维立方体,实现缩放、平移、旋转等几何变换,。
4、进行特殊模式的运行测试,并结合情况进行调整;
1、实验源代码
voidCJHBHView:
CJHBHDoc*pDoc=GetDocument();
PY(pDC,x1,y1,x2,y2,Tx,Ty);
BBI(pDC,x1,y1,x2,y2,Sx,Sy);
XZ(pDC,x1,y1,x2,y2,a);
PY(CDC*pDC,intx1,inty1,intx2,inty2,intTx,intTy)
intx3,y3,x4,y4;
x3=x1+Tx;
y3=y1+Ty;
x4=x2+Tx;
y4=y2+Ty;
pDC->MoveTo(x1,y1);
pDC->LineTo
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1