资源描述:
《c几何变换--例题》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、儿何变换举例:文件(E)编辑(E)查看(工)帮助@)1.地球卫星轨道□盲Qieifiit就绪#includenmath.hn#dcfincfnx(x)(int)(xo+(x)*sl)#definefny(y)(int)(yo-(y)*sl)#definexp(phi)(a*cos(phi)*cos(theta)-b*sin(phi)*sin(theta)+xc)#defineyp(phi)(a*cos(phi)*sin(theta)+b*sin(phi)*cos(theta)+yc)//xo,yo//si//a
2、,b//phi//theta〃xc,yc图形坐标系在视口中的位置比例椭圆的长短轴椭圆的参数椭圆的倾斜角度椭鬪中心在图形坐标系中的位置intxo,yo;doublesi;intr;voidCEx2()View::OnDraw(CDC*pDC){//TODO:adddrawcodefornativedatahereintxc,yc,a,b;doubletheta=3O;CRectrc;GctClicntRcct(&rc);xo=rc.right/2;yo=rc.bottom/2;xc=O;yc=O;sl=0.8;a
3、=200;b=80;r=(int)(b*1.3*sl);pDC->SclcctStockObjcct(NULL_BRUSH);pDC->Ellipse(fnx(xc)-r,fny(yc)-r,fnx(xc)+r,fny(yc)4-r);elli(xc,yc,a,b,theta);}voidCEx20Vicw::clli(intxc,intyc,inta,intb,doubletheta){inti;doubledt,xf,yf,phi,x,y;CClientDCdc(this);theta=theta*.017
4、45;dt=P.O1745;x=xp(0);y=yp(o);dc.MoveTo(fnx(x),fny(y));for(i=1;iv=360;i++){phi=i*dt;xf=a*cos(phi)*sl;yf=b*sin(phi)*sl;if(yf>0&&sqrt(xf*xf+yf*yf)5、;2.四条帆船头文件与数据#include#defineXS(x)sx*(x)#defineYS(y)sy*(y)#defineXT(x)(x+tx)#defineYT(y)(y+ty)在OnD「aw()函数屮添加pDC->SetMapMode(MM」SOTROPIC);pDC->SetWindowExt(100J00);pDC->SetViewportExt(200,-200);pDC->SetViewportOrg(120,400);pDC->MoveTo(0,150);pDC->LineT
6、o(0,0);pDC->LineTo(150,0);staticdoublexy[12][2]={0,0,40,0,40,-8,-25,-8,-40,&0,0,0,8,6,8,6,32,-6,24,・6,&0,8};intn,m;doublesx,sy,tx,ty;doublex,y,xpl,ypl,xp2,yp2;for(m=l;m<=4;m++){sx二pow(0.7,(mJ));sy=sx;tx=40*m;ty=tx;for(n=0;n<12;n++){x=xy[n]f()];y=xy[n][l];xpl
7、=XS(x);ypl=YS(y);xp2=XT(xpl);yp2=YT(ypl);if(n==0)pDC->MovcTo(int(xp2),int(yp2));elsepDC->LineTo(int(xp2),int(yp2));2.改为动iffli•增加全局变量intXO;•改写pDC->SetViewportOrg(XO,300);•设定ID_TIMER•响应消息WM_CREATEintnTimer=SetTimer(lD_TIMER,50,NULL);〃启动定时器XO=500;ASSERT(nTimer!
8、=O);•响应消息WM_DESTROYKillTimer(ID_TIMER);〃撤除ID为ID_TIMER的定时器•响应消息WM_T1MERif(XO<-200)XO=500;elseXO-;Invalidate();显示位图:voidCEx21View::OnDraw(CDC*pDC){//TODO:adddrawcodefornativedatahereCBitmapbmp;〃定义