以下均为MFC工程代码
代码一:简单实现
void CGeotranView::Onyuantu()
{
// 原图,画三角形
CDC *pDC=GetDC();
pDC->MoveTo(100,100);
pDC->LineTo(200,50);
pDC->LineTo(200,150);
pDC->LineTo(100,100);
ReleaseDC(pDC);
}
void CGeotranView::Ontranslation()
{
// 平移 tx=50,ty=60
CDC *pDC=GetDC();
int tx=50,ty=60;
pDC->MoveTo(100+tx,100+ty);
pDC->LineTo(200+tx,50+ty);
pDC->LineTo(200+tx,150+ty);
pDC->LineTo(100+tx,100+ty);
ReleaseDC(pDC);
}
void CGeotranView::Onrotation()
{
// 旋转, 角度sita=30度
CDC *pDC=GetDC();
double sita=30;
double hudu=sita*3.14159/180;
pDC->MoveTo(int(100*cos(hudu)-100*sin(hudu)),int(100*sin(hudu)+100*cos(hudu)));
pDC->LineTo(int(200*cos(hudu)-50*sin(hudu)),int(200*sin(hudu)+50*cos(hudu)));
pDC->LineTo(int(200*cos(hudu)-150*sin(hudu)),int(200*sin(hudu)+150*cos(hudu)));
pDC->LineTo(int(100*cos(hudu)-100*sin(hudu)),int(100*sin(hudu)+100*cos(hudu)));
ReleaseDC(pDC);
}
void CGeotranView::Onscaling()
{
// 缩放 sx=2,sy=3
int sx=2,sy=3;
CDC *pDC=GetDC();
pDC->MoveTo(100*sx,100*sy);
pDC->LineTo(200*sx,50*sy);
pDC->LineTo(200*sx,150*sy);
pDC->LineTo(100*sx,100*sy);
ReleaseDC(pDC);
}
POINT translationPoint(POINT point,int tx,int ty)
{
POINT newpoint;
newpoint.x= point.x+tx;
newpoint.y= point.y+ty;
return newpoint;
}
POINT rotationPoint(POINT point,double sita)
{
POINT newpoint;
double hudu=sita*3.14159/180;
newpoint.x= (int)(point.x*cos(hudu)-point.y*sin(hudu));
newpoint.y= (int)(point.x*sin(hudu)+point.y*cos(hudu));
return newpoint;
}
POINT scalingPoint(POINT point,int sx,int sy)
{
POINT newpoint;
newpoint.x= point.x*sx;
newpoint.y= point.y*sy;
return newpoint;
}
void CGeotranView::Onyuantu2()
{
POINT point1,point2,point3;
point1.x=200;point1.y=200;
point2.x=300;point3.y=150;
point3.x=300;point2.y=250;
// 原图,画三角形
CDC *pDC=GetDC();
pDC->MoveTo(point1);
pDC->LineTo(point2);
pDC->LineTo(point3);
pDC->LineTo(point1);
ReleaseDC(pDC);
}
void CGeotranView::Ontranslation2()
{
POINT point1,point2,point3;
point1.x=200;point1.y=200;
point2.x=300;point3.y=150;
point3.x=300;point2.y=250;
// 平移 tx=50,ty=60
CDC *pDC=GetDC();
int tx=50,ty=60;
pDC->MoveTo(translationPoint(point1,tx,ty));
pDC->LineTo(translationPoint(point2,tx,ty));
pDC->LineTo(translationPoint(point3,tx,ty));
pDC->LineTo(translationPoint(point1,tx,ty));
ReleaseDC(pDC);
}
void CGeotranView::Onrotation2()
{
POINT point1,point2,point3;
point1.x=200;point1.y=200;
point2.x=300;point3.y=150;
point3.x=300;point2.y=250;
// 旋转, 角度sita=30度
CDC *pDC=GetDC();
double sita=30;
pDC->MoveTo(rotationPoint(point1,sita));
pDC->LineTo(rotationPoint(point2,sita));
pDC->LineTo(rotationPoint(point3,sita));
pDC->LineTo(rotationPoint(point1,sita));
ReleaseDC(pDC);
}
void CGeotranView::Onscaling2()
{
POINT point1,point2,point3;
point1.x=200;point1.y=200;
point2.x=300;point3.y=150;
point3.x=300;point2.y=250;
// 缩放 sx=2,sy=2
int sx=2,sy=2;
CDC *pDC=GetDC();
pDC->MoveTo(scalingPoint(point1,sx,sy));
pDC->LineTo(scalingPoint(point2,sx,sy));
pDC->LineTo(scalingPoint(point3,sx,sy));
pDC->LineTo(scalingPoint(point1,sx,sy));
ReleaseDC(pDC);
}