辽工大自考实践矿业信息与计算机应用.docx
- 文档编号:25210055
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:15
- 大小:44.20KB
辽工大自考实践矿业信息与计算机应用.docx
《辽工大自考实践矿业信息与计算机应用.docx》由会员分享,可在线阅读,更多相关《辽工大自考实践矿业信息与计算机应用.docx(15页珍藏版)》请在冰豆网上搜索。
辽工大自考实践矿业信息与计算机应用
实验题目二维基本图形生成的算法实现
实验日期指导教师成绩
一、实验目的
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调用:
voidCDDAView:
:
OnDraw(CDC*pDC)
{
CDDADoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
LineDDA(50,55,500,120,123);
}
试验结果:
2、用中点(Besenham)算法实现椭圆或圆的绘制。
源代码:
voidCBesenhamView:
:
BresenhmaCircle(intxc,intyc,intr,intcolor)
{
CDC*pDC=GetDC();
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(x2,y2); pDC->MoveTo(x3,y3); pDC->LineTo(x4,y4); } voidCJHBHView: : BBI(CDC*pDC,intx1,inty1,intx2,inty2,floatSx,floatSy) { intx3,y3,x4,y4; x3=x1*Sx; y3=y1*Sy; x4=x2*Sx; y4=y2*Sy; pDC->MoveTo(x3,y3); pDC->LineTo(x4,y4); } voidCJHBHView: : XZ(CDC*pDC,intx1,inty1,intx2,inty2,doublea) { intx3,y3; doublerad=0.0174533; doublealpha,alpha1,c,s; alpha1=alpha*rad; c=cos(alpha1); s=sin(alpha1); x3=x2*c-y2*s; y3=y2*c+x2*s; pDC->MoveTo(x1,y1); pDC->LineTo(x3,y3); } 2、实验结果 实验题目BEZIER曲线和B样条曲线的绘制 实验日期指导教师成绩 一、实验目的 1、通过实验,进一步理解和掌握生成BEZIER曲线的算法; 2、掌握BEZIER曲线的基本生成过程; 3、通过编程,会在VC++环境下编程实现三次BEZIER曲线的绘制; 4、通过实验,进一步理解和掌握生成B样条曲线的算法; 5、掌握B样条曲线的基本生成过程; 6、通过编程,会在VC++环境下编程实现三次B样条曲线的绘制。 二、实验内容 1、编程实现三次BEZIER曲线的绘制; 2、编程实现三次B样条曲线的绘制。 三、实验步骤 1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用VC++语言编写源程序; 3、编辑源程序并进行调试; 4、进行特殊模式的运行测试,并结合情况进行调整; 5、对运行结果进行保存与分析; 6、打印源程序或把源程序以文件的形式提交; 7、按格式书写实验报告。 四、实验数据 实验源代码 1.绘制BEZIER曲线: voidCBezierView: : DrawBezier() { CClientDCdc(this); doublex,y; intrate=800,n; n=CtrlPoint-1; for(doublet=0;t<=1;t+=1.0/rate) { x=0;y=0; for(inti=0;i<=n;i++) { x+=pt[i].x*Cnk(n,i)*pow(t,i)*pow(1-t,n-i); y+=pt[i].y*Cnk(n,i)*pow(t,i)*pow(1-t,n-i); } dc.SetPixel(ROUND(x),ROUND(y),RGB(0,0,255)); } } 2.绘制B样条曲线: voidCCgView: : OnBSpline() { CClientDCdc(this); doublex,y,Step,t,t2,t3,F03,F13,F23,F33; Step=0.1; for(inti=0;i { t=0.0; do{ t2=t*t; t3=t2*t; F03=(3*t2-t3-3*t+1.0)/6.0; F13=(3*t3-6*t2+4.0)/6.0; F23=(3*t2-3*t3+3*t+1.0)/6.0; F33=t3/6.0; x=(F03*px[i]+F13*px[i+1]+F23*px[i+2]+F33*px[i+3]); y=(F03*py[i]+F13*py[i+1]+F23*py[i+2]+F33*py[i+3]); if(t elsedc.LineTo(x,y); t+=Step; }while(t<1.0001); } } 实验结果 Bezier曲线 B样条曲线
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 辽工大 自考 实践 矿业 信息 计算机 应用
![提示](https://static.bdocx.com/images/bang_tan.gif)