任意给定一个三角形, 对它进行平移,放大,两种变换.
(1)将三角形的坐标存放到数组中
(2)先画出原始的三角形,再进行变换,画出变换后的形状
(3)建议:
a)左键双击屏幕,画出三角形
void CTranslationView::DrawPolyline(CPoint spt[],int n)
{
RedrawWindow();
CDC* pDC=GetDC();
CPen newpen(PS_SOLID,1,RGB(255,0,0));
CPen *old=pDC->SelectObject(&newpen);
pDC->Polyline(spt,n); //画多边形
pDC->SelectObject(old);
ReleaseDC(pDC);
}
void CTranslationView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//多边形各顶点的坐标
spt[0]=CPoint(100,100);
spt[1]=CPoint(300,100);
spt[2]=CPoint(250,250);
spt[3]=CPoint(100,100);
CView::OnLButtonDblClk(nFlags, point);
DrawPolyline(spt,4);
}
b)建立菜单
一级菜单: 二维图形变换
二级菜单 ---平移
二级菜单 ---放大
c)选择"平移" 弹出一个对话框,输入移动向量的坐标,实现移动三角形
void CTranslationView::Onmove()
{
Cmove move;
move.DoModal();
int m_x;
int m_y;
m_x=move.m_x;
m_y=move.m_y;
// TODO: Add your command handler code here
spt[0].x=spt[0].x+m_x;
spt[0].y=spt[0].y+m_y;
spt[1].x=spt[1].x+m_x;
spt[1].y=spt[1].y+m_y;
spt[2].x=spt[2].x+m_x;
spt[2].y=spt[2].y+m_y;
spt[3].x=spt[3].x+m_x;
spt[3].y=spt[3].y+m_y;
DrawPolyline(spt,4);
}
d)选择"放大" ,弹出一个对话框,分别输入X,Y方向上的放大倍数, 实现三角形放大
void CTranslationView::Onenlarge()
{
// TODO: Add your command handler code here
Cenlarger enlarger;
enlarger.DoModal();
int m_x;
int m_y;
m_x=enlarger.m_x;
m_y=enlarger.m_y;
spt[1].x=spt[1].x+(spt[1].x-spt[0].x)*m_x;
spt[1].y=spt[1].y+(spt[1].y-spt[0].y)*m_y;
spt[2].x=spt[2].x+(spt[2].x-spt[0].x)*m_x;
spt[2].y=spt[2].y+(spt[2].y-spt[0].y)*m_y;
DrawPolyline(spt,4);
}