中考小说专题复习考点演示教学_第1页
中考小说专题复习考点演示教学_第2页
中考小说专题复习考点演示教学_第3页
中考小说专题复习考点演示教学_第4页
中考小说专题复习考点演示教学_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中考小说专题复习考点计算机图形学课程设计__图形绘制变换计算机图形学课程设计__图形绘制变换

计算机图形学课程设计__图形绘制变换计算机图形学实验报告课程名称:计算机图形学实验名称:图形绘制与变换学院:电子信息工程学院专业:计算机科学与技术班级:11计科本01班学号:姓名:张慧指导教师:王征风

二零一四年目录

TOC\o"1-3"\h\u

7564

一、引言

3

27339

二、设计需求

4

8775

2.1设计目标

4

4247

2.2设计环境

4

28688

4

22617

4

14734

2.3设计题目及要求

5

32052

2.4总体流程图

5

7206

三、课程设计原理

5

25237

3.1实现的算法

5

17063

6

28867

6

551

3.2图形变换的基本原理

8

9917

8

27367

8

5140

9

21819

四、总体设计与功能实现

9

17073

4.1主要界面设计

9

29378

4.2设置颜色界面

9

6048

9

28291

10

11093

4.3二维线画图元实现

10

15002

4.4画多边形功能的实现

14

23822

4.5画Bezier曲线功能的实现

15

24728

4.6二维图形变换的实现

16

16951

4.7三维图形的变换

18

五、实验心得体会一、引言计算机图形学(ComputerGraphics,简称CG)是一种使用数学算法将二维或三维图形转化为

计算机

显示器

的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。是计算机科学的一个分支领域,主要关注数字合成与操作视觉的图形内容。计算机图形学研究的是应用计算机产生图像的所有工作,不管图像是静态的还是动态的,可交互的还是固定的,等等。图形API是允许程序员开发包含交互式计算机图形操作的应用而不需要关注图形操作细节或任务系统细节的工具集。计算机图形学有着广泛的应用领域,包括物理、航天、电影、电视、游戏、艺术、广告、通信、天气预报等几乎所有领域都用到了计算机图形学的知识,这些领域通过计算机图形学将几何模型生成图像,将问题可视化从而为各领域更好的服务。?计算机图形学利用计算机产生让人赏心悦目的视觉效果,必须建立描述图形的几何模型还有光照模型,再加上视角、颜色、纹理等属性,再经过模型变换、视图变换、投影操作等,这些步骤从而实现一个完整的OpenGL程序效果。OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植。计算机图形学通过应用OpenGL的功能,使得生成的图形效果具有高度真实感。学习计算机图形学的重点是掌握OpenGL在图形学程序中的使用方法。?事实上,图形学也把可以表示几何场景的曲线曲面造型技术和实体造型技术作为其主要的研究内容。同时,真实感图形计算的结果是以

.html"

数字图像

的方式提供的,计算机图形学也就和

图像处理

有着密切的关系。通过21世纪是信息的时代,在日新月异的科技更新中相信计算机会发挥越来越重要的作用,计算机图形学也会在更多的领域所应用,虽然我国在这方面还比较薄弱,但相信会有越来越好的时候的。二、设计需求2.1设计目标以图形学算法为目标,深入研究。继而策划、设计并实现一个能够表现计算机图形学算法原理的或完整过程的演示系统,并能从某些方面作出评价和改进意见。通过完成一个完整程序,经历策划、设计、开发、测试、总结和验收各阶段,达到:巩固和实践计算机图形学课程中的理论和算法;学习表现计算机图形学算法的技巧;培养认真学习、积极探索的精神。2.2设计环境VC++6.0VC++6.0是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C++语言的要求编写,并加入了微软提供的功能强大的MFC(MicrosoftFoundationClass)类库。MFC中封装了大部分WindowsAPI函数和Windows控件,它包含的功能涉及到整个Windows操作系统。MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样,开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时间。另外,它提供了大量的代码,指导用户编程时实现某些技术和功能。因此,使用VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单。MFCMFC(MicrosoftFoundationClasses),是一个微软公司提供的类库(classlibraries)以C++类的形式封装了Windows的API,,它包含了窗口等许多类的定义。各种类的集合构成了一个应运程序的框架结构,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。MFC6.0版本封装了大约200个类,其中的一些可以被用户直接使用。例如CWnd类封装了窗口的功能,包括打印文本、绘制图形及跟踪鼠标指针的移动等;CsplitterWnd类是从CWnd类派生出来的,继承了基类或称父类CWnd类的所有特性,但增加了自己的功能,实现拆分窗口,使窗口至少可被拆分成两个窗口,用户可以移动两个窗口之间的边框来改变窗口的大小;CtoolBar类可以定义工具栏等。MFC命名的惯例是类的名字通常是由“C”打头;成员变量使用前缀“m_”,接着使用一个字母来指明数据类型,然后是变量的名称;所有的单词用大写字母开头。2.3设计题目及要求题目:实现多边形和曲线的绘制和变换要求:学会使用VC++编写实现图形的绘制变换,需包括直线、曲线、多边形的绘制和变换,及三维立体图形的相应变换.2.4总体流程图三、课程设计原理3.1实现的算法DDA是数字微分分析式(DigitalDifferentialAnalyzer)的缩写。

已知直线两端点(x1,y1)、(x2,y2)则斜率m为:m=(y2-y1)/(x2-x1)=Dx/Dy;直线中的每一点坐标都可以由前一点坐标变化一个增量(Dx,Dy)而得到,即表示为递归式:xi+1=xi+Dxyi+1=yi+Dy。递归式的初值为直线的起点(x1,y1),这样,就可以用加法来生成一条直线。具体算法是:

该算法适合所有象限,其中用了用了两个函数如:Integer(-8.5)=-9;Integer(8.5)=8;Sign(i),根据i的正负,分别得到-1,0,+1;

相应代码://DDADrawLine

{if(abs(x2-x1)>abs(y2-y1))

length=abs(x2-x1);

else

length=abs(y2-y1);

Dx=(x2-x1)/length;

Dy=(y2-y1)/length;

x=x1+0.5*Sign(Dx);

y=x2+0.5*Sign(Dy);

i=1;

while(i<=lenght)

{setpixel(Integer(x),Integer(y),color);

x=x+Dx;

y=y+Dy;

i+=1;}}

思路如下://假设该线段位于第一象限内且斜率大于0小于1,设起点为(x1,y1),终点为(x2,y2).//根据对称性,可推导至全象限内的线段.中心点算法画圆和椭圆(1)中心点算法画圆在一个方向上取单位间隔,在另一个方向的取值由两种可能取值的中点离圆的远近而定。实际处理中,用决策变量的符号来确定象素点的选择,因此算法效率较高。生成圆弧的中点算法和上面讲到的生成直线段的中点算法类似。考虑第一象限内的八分之一圆弧段。经过计算,得出判别式的递推公式为:

这两个递推公式的初值条件为:

编写成员函数如下:voidCMy2_9View::MidPointEllipse(CDC*pDC,doublea,doubleb,intcolor){doublex,y,d,xP,yP,squarea,squareb;squarea=a*a;squareb=b*b;xP=(int)(0.5+(double)squarea/sqrt((double)(squarea+squareb)));yP=(int)(0.5+(double)squareb/sqrt((double)(squarea+squareb)));x=0;y=b;d=4*(squareb-squarea*b)+squarea;pDC->SetPixel(x,y,color);while(x<=xP){if(d<=0)d+=4*squareb*(2*x+3);else{d+=4*squareb*(2*x+3)-8*squarea*(y-1);y--;}x++;pDC->SetPixel(x,y,color);}x=a;y=0;d=4*(squarea-a*squareb)+squareb;pDC->SetPixel(x,y,color);while(y<yP){if(d<=0)d+=4*squarea*(2*y+3);else{d+=4*squarea*(2*y+3)-8*squareb*(x-1);x--;}y++;pDC->SetPixel(x,y,color);}}编写OnDraw函数如下:voidCMy2_9View::OnDraw(CDC*pDC){CMy2_9Doc*pDoc=GetDocument(); ASSERT_VALID(pDoc); MidPointEllipse(pDC,500,300,RGB(0,0,0));}(2)中心点算法画椭圆我们先考虑圆心在原点的椭圆的生成,对于中心不是原点的椭圆,可以通过坐标的平移变换获得相应位置的椭圆。中心在原点。焦点在坐标轴上的标准椭圆具有X轴对称、Y轴对称和原点对称特性,已知椭圆上第一象限的P点坐标是(x,y),则椭圆在另外三个象限的对称点分别是(x,-y)、(-x,y)和(-x,-y)。因此,只要画出第一象限的四分之一椭圆,就可以利用这三个对称性得到整个椭圆。相应代码:voidMP_Ellipse(intxc,intyc,inta,intb){doublesqa=a*a;doublesqb=b*b;doubled=sqb+sqa*(-b+0.25);intx=0;inty=b;EllipsePlot(xc,yc,x,y);while(sqb*(x+1)<sqa*(y-0.5)){if(d<0){d+=sqb*(2*x+3);}else{d+=(sqb*(2*x+3)+sqa*(-2*y+2));y--;}x++;EllipsePlot(xc,yc,x,y);}d=(b*(x+0.5))*2+(a*(y-1))*2-(a*b)*2;while(y>0){if(d<0){d+=sqb*(2*x+2)+sqa*(-2*y+3);x++;}else{d+=sqa*(-2*y+3);}y--;EllipsePlot(xc,yc,x,y);}}3.2图形变换的基本原理3.2.1平移变换平移变换函数如下:voidglTranslate{fd}(TYPEx,TYPEy,TYPEz);三个函数参数就是目标分别沿三个轴向平移的偏移量。这个函数表示用于这三个偏移量生成的矩阵乘以当前矩阵。当参数是(0.0,0.0,0.0)时,表示对函数glTranslate*()的操作是单位矩阵,也就是对物体没有影响。旋转变换旋转变换函数如下:VoidglRota{fd}TYPEangle,TYPEx,TYPEy,TYPEz);函数中第一个参数是表示目标沿从点(x,y,z)到原点方向逆时针旋转的角度,后三个参数是旋转的方向点坐标。这个函数表示用这四个参数生成的矩阵乘以当前矩阵。当角度参数是0.0时,表示对物体没有影响。比例变换比例变换函数如下:VoidglScale{fd}(TYPEx,TYPEy,TYPEz);单个函数参数值就是目标分别沿三个轴方向缩放的比例因子。这个函数表示用这三个比例因子生成的矩阵乘以当前矩阵。这个函数能完成沿相应的轴对目标进行拉伸、压缩和反射三项功能。以参数x为例,若当x大于1.0时,表示沿x方向拉伸目标;若x小于1.0,表示沿x轴方向收缩目标;若x=-1.0表示沿x轴反射目标。其中参数为负值时表示对目标进行相应轴的反射变换。四、总体设计与功能实现4.1主要界面设计4.2设置颜色界面

voidCGraphicsView::OnClock(){ WHAT_TO_DO=ID_CLOCK;clean(); intxx=450,yy=300,r=150,d=5; inti,white=RGB(255,255,255); mile(xx,yy,r,COLOR); Matrixm(xx,240),s(xx,200); Matrixt1(xx,yy,true),t2(-xx,-yy,true),mr(PI/1800),sr(PI/30); mile(m.getx(),m.gety(),d+1,COLOR); mile(s.getx(),s.gety(),d,COLOR); dne(m.getx(),m.gety(),xx,yy,COLOR); dne(s.getx(),s.gety(),xx,yy,COLOR); for(i=0;i<120;i++){ ::Sleep(80); mile(m.getx(),m.gety(),d+1,white); mile(s.getx(),s.gety(),d,white); dne(m.getx(),m.gety(),xx,yy,white); dne(s.getx(),s.gety(),xx,yy,white); m=t1*mr*t2*m; s=t1*sr*t2*s; mile(m.getx(),m.gety(),d+1,COLOR); mile(s.getx(),s.gety(),d,COLOR); dne(m.getx(),m.gety(),xx,yy,COLOR); dne(s.getx(),s.gety(),xx,yy,COLOR);}}“设置--颜色”后,运行结果如下:4.3二维线画图元实现voidCGraphicsView::MidCir(CDC*pdc,intx0,inty0,intx1,inty1,intcolor){ intr,x,y,deltax,deltay,d; r=sqrt(((double)x1-(double)x0)*((double)x1-(double)x0)+((double)y1-(double)y0)*((double)y1-(double)y0)); x=0; y=r; deltax=3; deltay=2-r-r; d=1-r; while(x<=y) { ::Sleep(time); pdc->SetPixel(x+x0,y+y0,color); ::Sleep(time); pdc->SetPixel(-x+x0,y+y0,color); ::Sleep(time); pdc->SetPixel(x+x0,-y+y0,color); ::Sleep(time); pdc->SetPixel(-x+x0,-y+y0,color); ::Sleep(time); pdc->SetPixel(y+x0,x+y0,color); ::Sleep(time); pdc->SetPixel(-y+x0,x+y0,color); ::Sleep(time); pdc->SetPixel(y+x0,-x+y0,color); ::Sleep(time); pdc->SetPixel(-y+x0,-x+y0,color); if(d<0) { d+=deltax; deltax+=2; x++;} else { d+=deltax+deltay; deltax+=2; deltay+=2; x++; y--; }}}voidCGraphicsView::midellispse(intxx,intyy,intr1,intr2,intcolor){ }voidCGraphicsView::Ellipse(CDC*pdc,intx1,inty1,intx2,inty2,intcolor){xx0=(x2+x1)/2; yy0=(y2+y1)/2; rra=abs(x2-x1)/2; rrb=abs(y2-y1)/2; if(rra==0&&rrb==0)return; Ellipse0(pdc,xx0,yy0,rra,rrb,color);}voidCGraphicsView::Ellipse0(CDC*pdc,intx0,inty0,inta,intb,intcolor){inti,yy; intx,y,deltax,deltay; intaa,aa2,aa3,bb,bb2,bb3; doubled1,d2; aa=a*a; aa2=aa*2; aa3=aa*3; bb=b*b; bb2=bb*2; bb3=bb*3; x=0; y=b; d1=bb+aa*(-b+0.25); deltax=bb3; deltay=-aa2*b+aa2; pdc->SetPixelV(x+x0,y+y0,color); pdc->SetPixelV(x+x0,-y+y0,color); while(bb*(x+1)<aa*(y-0.5)) { yy=y; if(d1<0) { d1+=deltax; deltax+=bb2; x++;} else { d1+=deltax+deltay; deltax+=bb2; deltay+=aa2; x++; y--;} ::Sleep(time); pdc->SetPixelV(x+x0,y+y0,color); ::Sleep(time); pdc->SetPixelV(-x+x0,y+y0,color); ::Sleep(time); pdc->SetPixelV(x+x0,-y+y0,color); ::Sleep(time); pdc->SetPixelV(-x+x0,-y+y0,color);} d2=bb*(x+0.5)*(x+0.5)+aa*(y-1)*(y-1)-aa*bb; deltax-=bb; deltay+=aa; while(y>0) { if(d2<0) { d2+=deltax+deltay; deltax+=bb2; deltay+=aa2; x++; y--; } else { d2+=deltay; deltay+=aa2; y--; } ::Sleep(time); pdc->SetPixelV(x+x0,y+y0,color); ::Sleep(time); pdc->SetPixelV(-x+x0,y+y0,color); ::Sleep(time); pdc->SetPixelV(x+x0,-y+y0,color); ::Sleep(time); pdc->SetPixelV(-x+x0,-y+y0,color); }}voidCGraphicsView::DDALine(CDC*pdc,intx0,inty0,intx1,inty1,intcolor){ intxx,yy,s,s1,s2,di; floatdx,dy,k,x,y; dx=x1-x0; if(dx>=0)s1=1; else s1=-1; dy=y1-y0; if(dy>=0)s2=1; else s2=-1; dx=abs(dx); dy=abs(dy); if(dx>=dy) {s=0; di=(int)dx; k=dy/dx*s2;} else { s=1; di=(int)dy; k=dx/dy*s1;} x=x0; y=y0; for(inti=0;i<=di;i++) {if(s==0) {xx=(int)x; yy=(int)(y+0.5); ::Sleep(time); pdc->SetPixel(xx,yy,color); x+=s1; y+=k;} else{ xx=(int)(x+0.5); yy=(int)y; ::Sleep(time); pdc->SetPixel(xx,yy,color); y+=s2; x+=k;}}}

4.4画多边形功能的实现voidCGraphicsView::OnDrawDuoBX(){ Vertex_Countdlg; if(dlg.DoModal()==IDOK) { if(dlg.m_vertex_count>MAX) { MessageBox("输入顶点数过大"); return; } VertexTotal=dlg.m_vertex_count; CDC*pDC=GetDC(); CPenpen(PS_SOLID,2,RGB(255,255,255)); CPen*pOldpen=pDC->SelectObject(&pen); pDC->MoveTo((int)(inVertexArray[0].x+0.5),(int)(inVertexArray[0].y+0.5)); inti; for(i=1;i<inLength;i++) pDC->LineTo((int)(inVertexArray[i].x+0.5),(int)(inVertexArray[i].y+0.5)); pDC->LineTo((int)(inVertexArray[0].x+0.5),(int)(inVertexArray[0].y+0.5)); pDC->SelectObject(pOldpen); ReleaseDC(pDC); inLength=0; outLength=0; WHAT_TO_DO=ID_DrawDuoBX;}}

4.5画Bezier曲线功能的实现voidCGraphicsView::OnBezier(){ //TODO:Addyourcommandhandlercodehere WHAT_TO_DO=ID_BEZIER; CDC*p=GetDC(); p->TextOut(10,20,"PS:鼠标左键添加曲线,鼠标右键修改曲线."); ReleaseDC(p);}voidCGraphicsView::OnBezierClear(){ n=-1; RedrawWindow();}voidCGraphicsView::DrawBezier(DPOINT*p){ if(n<=0)return; if((p[n].x<p[0].x+1)&&(p[n].x>p[0].x-1)&&(p[n].y<p[0].y+1)&&(p[n].y>p[0].y-1)) { pDC->SetPixel(p[0].x,p[0].y,COLOR); return; } DPOINT*p1; p1=newDPOINT[n+1]; inti,j; p1[0]=p[0]; for(i=1;i<=n;i++) { for(j=0;j<=n-i;j++) { p[j].x=(p[j].x+p[j+1].x)/2; p[j].y=(p[j].y+p[j+1].y)/2; } p1[i]=p[0];} DrawBezier(p); DrawBezier(p1); deletep1;}voidCGraphicsView::OnBezierAdd(){ AddorMove=1; }voidCGraphicsView::OnBezierMove(){ AddorMove=-1;}voidCGraphicsView::OnMouseMove(UINTnFlags,CPointpoint){ switch(WHAT_TO_DO) { caseID_BEZIER: { if(current>=0) { points[current].x=point.x; points[current].y=point.y; RedrawWindow();} if(current2>=0) { points[current2].x=point.x; points[current2].y=point.y; RedrawWindow();} break; } default:break;} CView::OnMouseMove(nFlags,point);}图1图2上图1移动后的曲线上图2移动后的曲线4.6二维图形变换的实现可以实现一椭圆在界面上的随机移动,一圆在界面上饶某一点的旋转和一正方形由大变小在变大的变化,部分实现代码如下:voidCGraphicsView::OnXuanzhuan(){ WHAT_TO_DO=ID_XUANZHUAN; time=0; OnClear(); CClientDCdc(this); CDC*pDC=&dc; inti,white=RGB(255,255,255),point[2][2]={{300,200},{300,250}}; Matrixa(point[0][0],point[0][1]),b(point[1][0],point[1][1]); intmidx=(point[0][0]+point[1][0])/2,midy=(point[0][1]+point[1][1])/2; Matrixt1(midx,midy,true),t2(-midx,-midy,true); Matrixr(PI/50); Matrixtemp(midx,midy,true); temp=t1*r*t2; for(i=0;i<200;i++){ ::Sleep(50); MidCir(pDC,a.getx(),a.gety(),b.getx(),b.gety(),white); a=temp*a; b=temp*b; MidCir(pDC,a.getx(),a.gety(),b.getx(),b.gety(),COLOR); } for(i=0;i<200;i++){ ::Sleep(50); MidCir(pDC,a.getx(),a.gety(),b.getx(),b.gety(),white); a=temp*a; b=temp*b; MidCir(pDC,a.getx(),a.gety(),b.getx(),b.gety(),COLOR); } time=5;}voidCGraphicsView::OnUpdateXuanzhuan(CCmdUI*pCmdUI){ pCmdUI->SetCheck(WHAT_TO_DO==ID_XUANZHUAN);}voidCGraphicsView::OnScale(){ WHAT_TO_DO=ID_SCALE; OnClear(); CClientDCdc(this); CDC*pDC=&dc; time=0; inti,white=RGB(255,255,255),point[4][2]={{300,250},{400,250},{300,300},{400,300}}; floatsx=0.9,sy=0.85; intmidx=(point[0][0]+point[3][0])/2,midy=(point[0][1]+point[3][1])/2; Matrixs1(sx,sy),s2(1/sx,1/sy); Matrixt1(midx,midy,true),t2(-midx,-midy,true); Matrixa(point[0][0],point[0][1]),b(point[1][0],point[1][1]); Matrixc(point[2][0],point[2][1]),d(point[3][0],point[3][1]); Matrixtemp(midx,midy,true); temp=t1*s1*t2; DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),COLOR); DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),COLOR); DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),COLOR); DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),COLOR); for(i=0;i<20;i++){ ::Sleep(30); DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),white); DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),white); DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),white); DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),white); a=temp*a; b=temp*b; c=temp*c; d=temp*d; DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),COLOR); DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),COLOR); DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),COLOR); DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),COLOR);} temp=t1*s2*t2; for(i=0;i<20;i++){ ::Sleep(30); DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),white); DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),white); DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),white); DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),white); a=temp*a; b=temp*b; c=temp*c; d=temp*d; DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),COLOR); DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),COLOR); DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),COLOR); DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),COLOR); } time=5;}voidCGraphicsView::OnUpdateScale(CCmdUI*pCmdUI){ pCmdUI->SetCheck(WHAT_TO_DO==ID_SCALE);}4.7三维图形的变换主要实现三维图形的上下左右平移,分别绕X轴Y轴Z轴的旋转,放大和缩小,以及正方体六个面的颜色变换,除此之外,还可以选择背景颜色的改变voidCGraphicsView::OnAoduomianti(){ WHAT_TO_DO=ID_AODUOMIANTI; CDrawDLGdlg1; dlg1.DoModal();}voidCGraphicsView::OnUpdateAoduomianti(CCmdUI*pCmdUI){ pCmdUI->SetCheck(WHAT_TO_DO==ID_AODUOMIANTI);}voidCDrawDLG::OnPaint(){ CPaintDCdc(this);//devicecontextforpainting CWnd*pWnd=GetDlgItem(IDC_DRAW); pWnd->UpdateWindow();// CDC*PDC=pWnd->GetDC(); Draw();}voidCDrawDLG::Draw(){ CWnd*pWnd=GetDlgItem(IDC_DRAW); pWnd->UpdateWindow(); CDC*pDC=pWnd->GetDC(); CRectrect; pWnd->GetClientRect(rect); Dv[8]={ {-fs,-fs,fs},{-fs,fs,fs},{fs,fs,fs},{fs,-fs,fs},{-fs,-fs,-fs},{-fs,fs,-fs},{fs,fs,-fs},{fs,-fs,-fs} },d[8]; POINTp0[4],p1[4],p2[4],p3[4],p4[4],p5[4],w[8]; intz[8]; for(inti=0;i<8;i++) { d[i].x=v[i].x; d[i].y=(int)(v[i].y*cos(a*DU)-v[i].z*sin(a*DU)); d[i].z=(int)(v[i].y*sin(a*DU)+v[i].z*cos(a*DU)); v[i].x=(int)(d[i].x*cos(b*DU)+d[i].z*sin(b*DU)); v[i].y=d[i].y; v[i].z=(int)(d[i].z*cos(b*DU)-d[i].x*sin(b*DU)); d[i].x=(int)(v[i].x*cos(c*DU)-v[i].y*sin(c*DU)); d[i].y=(int)(v[i].x*sin(c*DU)+v[i].y*cos(c*DU)); d[i].z=v[i].z; w[i].x=d[i].x+cx; w[i].y=d[i].y+cy; z[i]=d[i].z;} p0[0]=w[0];p0[1]=w[1];p0[2]=w[2];p0[3]=w[3]; p1[0]=w[4];p1[1]=w[5];p1[2]=w[6];p1[3]=w[7];p2[0]=w[0];p2[1]=w[1];p2[2]=w[5];p2[3]=w[4]; p3[0]=w[1];p3[1]=w[2];p3[2]=w[6];p3[3]=w[5]; p4[0]=w[2];p4[1]=w[3];p4[2]=w[7];p4[3]=w[6]; p5[0]=w[0];p5[1]=w[3];p5[2]=w[7];p5[3]=w[4]; switch(Maxnum(z,7)) { case0:fill(p0,p2,p5,0,2,5);break; case1:fill(p0,p2,p3,0,2,3);break; case2:fill(p0,p3,p4,0,3,4);break; case3:fill(p0,p4,p5,0,4,5);break; case4:fill(p1,p2,p5,1,2,5);break; case5:fill(p1,p2,p3,1,2,3);break; case6:fill(p1,p3,p4,1,3,4);break; case7:fill(p1,p4,p5,1,4,5);break;}}BOOLCDrawDLG::OnInitDialog(){ CDialog::OnInitDialog(); m_scroll1.SetScrollRange(-180,180); m_scroll1.SetScrollPos(0); m_scroll2.SetScrollRange(-180,180); m_scroll2.SetScrollPos(0); m_scroll3.SetScrollRange(-180,180); m_scroll3.SetScrollPos(0); m_scroll4.SetScrollRange(0,350); m_scroll4.SetScrollPos(200); m_scroll5.SetScrollRange(0,300); m_scroll5.SetScrollPos(115); m_scroll6.SetScrollRange(0.00,300.00); m_scroll6.SetScrollPos(50.00); a=b=c=0; fs=50.00; SetTimer(1,100,NULL); Ctrl=0; cx=200; cy=115; COLOR1=RGB(123,234,43); COLOR2=RGB(123,123,0); COLOR3=RGB(123,24,235); COLOR4=RGB(0,123,95); COLOR5=RGB(23,234,34); COLOR6=RGB(234,124,0); COLOR7=RGB(0,43,98); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCDrawDLG::OnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar){ intnID=pScrollBar->GetDlgCtrlID(); switch(nID) { caseIDC_SCROLLBAR1:a=pScrollBar->GetScrollPos(); switch(nSBCode) { caseSB_LINELEFT:a--;break; caseSB_LINERIGHT:a++;break; caseSB_PAGELEFT:a-=10;break; caseSB_PAGERIGHT:a+=10;break; caseSB_THUMBTRACK:a=nPos;break;} if(a<-180)a=180; if(a>180)a=-180; pScrollBar->SetScrollPos(a); break; caseIDC_SCROLLBAR2:b=pScrollBar->GetScrollPos(); switch(nSBCode) { caseSB_LINELEFT:b--;break; caseSB_LINERIGHT:b++;break; caseSB_PAGELEFT:b-=10;break; caseSB_PAGERIGHT:b+=10;break; caseSB_THUMBTRACK:b=nPos;break;} if(b<-180)b=180; if(b>180)b=-180; pScrollBar->SetScrollPos(b); break; caseIDC_SCROLLBAR3:c=pScrollBar->GetScrollPos(); switch(nSBCode) { caseSB_LINELEFT:c--;break; caseSB_LINERIGHT:c++;break; caseSB_PAGELEFT:c-=10;break; caseSB_PAGERIGHT:c+=10;break; caseSB_THUMBTRACK:c=nPos;break;} if(c<-180)c=180; if(c>180)c=-180; pScrollBar->SetScrollPos(c); break; caseIDC_SCROLLBAR4:cx=pScrollBar->GetScrollPos(); switch(nSBCode) { caseSB_LINELEFT:cx--;break; caseSB_LINERIGHT:cx++;break; caseSB_PAGELEFT:cx-=10;break; caseSB_PAGERIGHT:cx+=10;break; caseSB_THUMBTRACK:cx=nPos;break;} if(cx<0)cx=200; if(cx>350)cx=200; pScrollBar->SetScrollPos(cx); break; caseIDC_SCROLLBAR5:cy=pScrollBar->GetScrollPos(); switch(nSBCode) { caseSB_LINELEFT:cy--;break; caseSB_LINERIGHT:cy++;break; caseSB_PAGELEFT:cy-=10;break; caseSB_PAGERIGHT:cy+=10;break; caseSB_THUMBTRACK:cy=nPos;break;} if(cy<0)cy=300; if(cy>300)cy=0; pScrollBar->SetScrollPos(cy); break; caseIDC_SCROLLBAR6:fs=pScrollBar->GetScrollPos(); switch(nSBCode) { caseSB_LINELEFT:fs--;break; caseSB_LINERIGHT:fs++;break; caseSB_PAGELEFT:fs-=0.55;break; caseSB_PAGERIGHT:fs+=0.55;break; caseSB_THUMBTRACK:fs=nPos;break;} if(fs<0)fs=50; if(fs>300)fs=50; pScrollBar->SetScrollPos(fs); break;// UpdateData(FALSE);}// Invalidate(); Draw(); CDialog::OnHScroll(nSBCode,nPos,pScrollBar);}voidCDrawDLG::OnOK(){ KillTimer(1); CDialog::OnOK();}intCDrawDLG::Maxnum(int*p,intn){ intmax=p[0]; intx; for(inti=0;i<=n;i++) { if(max<=p[i]) { max=p[i]; x=i; } } returnx;}voidCDrawDLG::fill(POINT*x,POINT*y,POINT*z,inti,intj,intq){ CWnd*pWnd=GetDlgItem(IDC_DRAW); pWnd->UpdateWindow(); CDC*pDC=pWnd->GetDC(); CRectrect; pWnd->GetClientRect(rect); CDCdcmem; dcmem.CreateCompatibleDC(pDC); CBitmapbmp,*oldbmp; bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height()); oldbmp=dcmem.SelectObject(&bmp); CBrushbrush[6]; brush[0].CreateSolidBrush(COLOR1); brush[1].CreateSolidBrush(COLOR2); brush[2].CreateSolidBrush(COLOR3); brush[3].CreateSolidBrush(COLOR4); brush[4].CreateSolidBrush(COLOR5); brush[5].CreateSolidBrush(COLOR6); CBrush*oldbrush=dcmem.SelectObject(&brush[i]); dcmem.FillSolidRect(rect,COLOR7); dcmem.Polygon(x,4); dcmem.SelectObject(&brush[j]); dcmem.Polygon(y,4); dcmem.SelectObject(&brush[q]); dcmem.Polygon(z,4); dcmem.SelectObject(oldbrush); for(intb=0;b<6;b++) brush[b].DeleteObject(); pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(), &dcmem,0,0,SRCCOPY); dcmem.SelectObject(oldbmp); bmp.DeleteObject(); dcmem.DeleteDC();}实现多面体的上下左右平移(2)实现多面体的绕轴旋转:实现多面体的放大缩小:实现多面体及背景的颜色设置:三维图形变换整体图形五、实验心得体会在本次课程设计过程中,基本掌握了计算机图形学关于图形绘制变换的基础知识,DDA法画直线和中心点法画圆及椭圆的方法,还对图形的变换及需要用到的一系列的函数有了相应的理解,也了解的很多有关于图形学中三维图形的变换的知识。不过都只是皮毛而已,从中锻炼了自己的动手做实验的能力,但同时也让自己看清了自己的水平,以便在以后的生活里多加强有关这方面的学习,从而提升自己在图形学方面的知识水平。在本次课程设计中,设计方案存在着很多的死板化的实现方法,也是很不人性化的一点,只提供了画一种曲线的方法,且画出的曲线只能移动,此为本次设计方案的不足之一;然后就是能实现曲面和多边形的绘制,却没有对应的实现绘制好图形后直接对其进行平移、选择等变换,此为设计方案不足之二。再者就是三维图形只能实现变换不能实现绘制,此为设计方案不足之三。鉴于个人能力真的有限,所以只能设计出此种级别的效果了。因为实验重要的只是思想过程,效果的不美观只能是因为学习的知识还远远不够,所以不能设计出完美的全面的图形绘制变换程序。经过此次设计,使我学到了很多东西,在没有开始做程序之前,没有任何思路,不知道该从哪里入手,可能是因为自己平时不认真听课的缘故。后来经过上网查询资料,翻阅参考书,在别人做的程序的启发下,才有了做此程序设计的眉目。在设计过程中遇到了很多的问题,在这里需要感谢王征风老师的帮助和指导,以及同学的帮助,最后一个个问题都被解决了,写出了完整的程序设计。最后也发现,其实只要努力,写出一个设计不是很困难,重要的是自己在写程序的过程中,要会学习,会查阅资料。这次的课程设计让我学习到了很多,以后我会努力提高自己在图形学方面的知识水平。

圆的切点弦方程圆的切点弦方程

/圆的切点弦方程圆的切点弦方程【方法】1.设出直线,再求解;2.利用轨迹思想,用向量或平面几何知识求解。【问题】对于坐标平面内任一点,直线L:与圆O:究竟是什么关系呢?下面我们进行探究:一、当点M在圆O上时,直线L是圆的切线。二、当点M在圆O外时,1.直线L不是圆O的切线,下面证明之:∵圆心O到L的距离为,由在圆O外,得∴,故直线L与圆O相交.2.此时直线L与过点M的圆的切线又是什么关系呢?首先研究L的特征:易知:OML。(N为L与OM的交点)从而OAMA,MA为圆的一条切线,故直线L为过点M的圆的两条切线的两个切点所在的直线。事实上(另证),如图1,设过点M的圆O的两条切线为L1,L2,切点分别为A、B,则直线MA:,直线MB:.∵点M的坐标满足直线MA与MB的方程,∴,由此可见A、B的坐标均满足方程,由于两点确定一条直线∴直线AB的方程为。所以此时的直线L是经过点P的切点弦AB所在直线的方程,而不是圆O的切线。【注】上述点M、直线L实质上是射影几何中的极点和极线。特别的,当M在圆上时,极线即为切线。三、当点M在圆O内时,1.直线L也不是圆O的切线。下面给出证明:∵圆心O到L的距离为,由在圆O内,得∴故直线L与圆O相离.2.此时直线L与圆的切线的关系又如何呢?首先研究L的特征:由上述探讨过程易知,直线LOM,此外,L一定过点P(P为两切线的交点,ABOM),从而L就在图2中过点P且与AB平行的位置处。事实上(另证),∵直线L的斜率,而直线OM的斜率,∴一方面,过点M与OM垂直的直线方程为即另一方面,将直线OM与L的方程联立,得到它们的交点P的坐标为,由(二)可知过点P的圆的切点弦所在直线的方程为,即,即为直线的方程。由此我们看到∥,直线L是由点M确定的。另外,直线L是过点M的弦(除O,M的弦)的两个端点的圆的两条切线的交点轨迹,证明如下:设由(二)可知动弦AB的方程为,又因为点M在AB上,则,以x,y分别代,则。

三年级下册安全教育教学计划、教学设计三年级下册安全教育教学计划、教学设计

/三年级下册安全教育教学计划、教学设计三年级下册安全教育教案教学计划小学生是祖国的花朵,祖国的希望和未来。但因小学生年龄偏小,自我保护的意识不够强,因而会受到一些安全方面的威胁。这就需要家长和老师在日常生活和学习中经常灌输安全的意识。安全教育工作关系到师生生命的安危,是学校开展正常教育、教学工作和社会稳定的头等大事,它的责任重于泰山,必须长抓不懈,时时警钟长鸣。本学期,为切实搞好三年级安全教育教学工作,特制订本计划。一、指导思想以湖南省义务教育地方课程安全教育课程实施指导意见的指导思想为依据,认真贯彻落实各级教育安全工作的法律法规和会议精神,落实安全教育内容,努力提高三年级学生的安全意识。二、教学内容及目标:总目标通过开展公共安全教育,培养学生的社会安全责任感,使学生逐步形成安全意识,掌握必要的安全行为的知识和技能,了解相关的法律法规常识,养成在日常生活和突发安全事件中正确应对的习惯,最大限度地预防安全事故发生和减少安全事件对学生造成的伤害,保障学生健康成长。具体目标(一)社会安全教育1.了解在公共场所活动时的安全常识,遵守公共规则,避免扰乱公共秩序行为的发生。2.认识与陌生人交往中应当注意的问题,逐步形成基本的自我保护意识。3.了解社会安全类突发事故的危险和危害,提高自我保护能力。引导学生形成基本的自我保护意识。(二)公共卫生安全教育1.了解基本公共卫生和饮食卫生常识,逐步形成良好的公共卫生和饮食卫生习惯。2.了解本年龄段常见传染病的预防常识,培养疾病预防意识。3.了解有关卫生保健常识,养成良好的个人卫生习惯。(三)意外伤害安全教育1.认识常见的交通安全标志,了解出行时道路交通安全常识,树立遵守交通规则的意识。2.初步识别各种危险标志,了解简单的居家安全常识,3.初步学会在事故灾害事件中紧急求助和自我保护的方法,学会正确使用和拨打110、119、120、122等电话。4.掌握正确的使用方法,初步具备使用电梯、索道、游乐设施等特种设备的安全意识。(四)自然灾害安全教育1.了解学校所在地区和生活环境中可能发生的自然灾害及其危险性,逐步提高在自然灾害中的自我保护意识。2.学习躲避自然灾害引发危险的简单方法,初步学会在自然灾害发生时的自我保护和求助的简单技能。(五)校园安全教育1.与同学友好相处,不打架;初步形成避免在活动、游戏中造成误伤的意识。2.学会当发生突发事件时听从成人安排或者利用现有条件有效地保护自己的方法。三、实施措施1、在教学中,坚持以人为本,着眼于全体学生的身心健康,安全发展。引导学生树立“真爱生命,安全第一,遵纪守法,和谐共处”的意识,养成良好的安全行为习惯。2、深入挖掘学生已有的生活经验和情感体验,积极从生活实际和社会实际中寻找相关的教学素材。注重选取学生普遍关注和乐于交流的安全问题作为教学内容。帮助学生掌握相关的安全知识和方法技能,并运用到生活实际中去。3、充分利用多种途径和方法,全方位多角度的开展安全教育。如运用广播、电视、计算机、网络等现代教学手段增强安全教育效果;与当地公安、消防、卫生、交通等部门建立联系,协助学校进行安全教育。4、在教学中,引导学生主动探究,开展思考、讨论、收集、辩论、防谈、演习等多种活动,在合作学习和互动学习中发现问题,分析问题,在问题解决中,提高安全技能掌握安全知识丰富情感体验。5、通过开展丰富多彩的教学活动,帮助学生掌握必要的安全知识,注重培养学生预防和应对安全事件和事故的能力,形成尊重生命、爱惜生命、健康向上的生活态度,全面落实课程目标。第一课???同学相处防意外教学目标:1、引导学生懂得不避风险学相处要友爱谦让,不相互打闹,学会正确处理同学间的矛盾。2、初步形成避免在活动、游戏中赞成误伤的意识,学会辨别具有危险性的游戏。3、学会正确安排课间休息时间,课余时间做有意义的活动。教材分析:引言部分通过一段简短的话,描述了同学相处的重要意义,并引出本课的主要任务在快乐的学习生活中、在同学相处中也存在着安全隐患。主体部分共设“和睦相处防意外”和“课间活动注意安全”两个主题。教学过程:每天早晨,伴随着灿烂的朝阳,倾听着清脆的鸟叫,同学们背着书包,高高兴兴地来到校园,快快乐乐地学习知识、开展活动,多么幸福啊!可是,你知道吗?即使在美丽的校园内,我们也要注意安全,不能疏忽大意,要不就有可能发生一些意外伤害事故。因此,我们要让安全的警钟长鸣,请记住:“安全无小事”,处处要小心。同学们,这可不是危言耸听哦。不相信吗?那就赶快读读下面这个真实的故事吧。【故事一】一天放学后,某小学两名学生小乔和小王在学校操场一起玩耍。小王把小乔当作靶子,取出自制的小弓箭放上小木棍玩射击游戏,玩得特别开心。可是,就在小王对小乔射第三箭时,悲剧发生了!尖尖的小木棍飞快地往前飞去,一下击中了小乔的右眼,小乔捂着眼睛疼得在地上打滚,鲜血不停地从眼睛里流出来,小王吓得目瞪口呆,赶紧去学校找老师。老师们赶来后,立刻把小乔送到了医院,医生竭尽全力进行抢救治疗。可是因为伤势严重,虽然花费医疗费6万余元,小乔的那只眼睛始终没有治好,几乎看不见任何东西,造成了终生残疾。同学们,读了这个真实的故事,你的心里是不是沉甸甸的?只是因为同学之间的玩耍嬉戏,只是因为一时的疏忽大意,竟然使小乔的眼睛一辈子都无法看见光明,竟然造成了终生残疾,这真是太悲惨了!其实,我们应该知道,正是因为同学们拥有对危险的模糊认知能力、较差的防范意识、柔弱的体质和脆弱的心理素质,才导致了这一类意外伤害的发生。因此,为了使自己和同学们能够健康地、安全地快乐地学习、活动与生活,在校园内活动时,我们必须增强安全意识,时刻注意安全,了解一些在校内活动时怎样预防意外伤害的基本知识。一、什么叫校内活动时的意外伤害???小学校内活动致意外伤害事故,主要是指学生在校活动时,由于不可预见的原因或不可抵抗的力量而导致的人身伤害事故。二、校内活动致意外伤害事故案例分析【案例二】2005年10月31日19点多钟,某市某小学四年级的学生正在进行晚自习,老师在讲台上批改作业。19时50分左右,9岁的女生杨杨隔着过道撑着两边的课桌跳跃时,不慎摔倒在地,顿时大哭起来。医务室的医生发现杨杨的两颗牙齿被部分摔断。“虽在医院进行了牙齿修补手术,但这次意外对孩子未来生活可能造成的影响我们十分担心。”杨杨的妈妈说。同学们,这是一起偶然发生的普遍事故,可能在你的周围也发生过类似的事故。杨杨在课间休息时,自己隔着过道撑着两边的课桌跳跃时,不慎摔

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论