[C语言]二维图形基本几何变换的实现

任意给定一个三角形, 对它进行平移,放大,两种变换.

(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);
 
}

你可能感兴趣的:(编程技术)