计算机图形学实验报告几何变换.doc
文本预览下载声明
计算机图形学实验报告
计算机图形学实验报告 姓 名 徐沛华 班级 1011 学号成绩 实验名称 二维图形的几何变换 实验目的 对平面图形进行平移、缩放、旋转、对称
实验步骤 算法分析:
图形变换是指对图形的几何信息经过几何变换后产生新的图形。图形变换既可以看作坐标系不动而图形变动,变动后的图形在坐标系中的坐标值发生变化;也可以看作图形不动而坐标系变动,变动后,该图形在新的坐标系下具有新的坐标值。
设(x,y)为图形原坐标值,经几何变换后坐标值变为()。以下为四种常用的几何变换公式。
(a) 平移变换:
平移变换在前面的任务中已经用到过,它的变换公式为:
(b) 旋转变换:
绕原点旋转的变换公式为:
(c) 放缩变换:
几种变换可以组合在一起形成复合变换。例如平移变换与旋转变换组合得到:
(d) 相对点的旋转变换:
ii、算法程序:
void CZhouView::pingyi()
{
CClientDC dc(this);
dc.MoveTo(m_nPoint1.x,m_nPoint1.y);
dc.LineTo(m_nPoint2.x,m_nPoint2.y);
dc.MoveTo(m_nPoint1.x+100,m_nPoint1.y+100);
dc.LineTo(m_nPoint2.x+100,m_nPoint2.y+100);
}
void CZhouView::xuanzhuan()
{
CClientDC dc(this);
dc.MoveTo(m_nPoint1.x,m_nPoint1.y);
dc.LineTo(m_nPoint2.x,m_nPoint2.y);
dc.MoveTo((m_nPoint1.x*cos(0.5))-(m_nPoint1.y*sin(0.5)),(m_nPoint1.x*sin(0.5))+(m_nPoint1.y*cos(0.5)));
dc.LineTo((m_nPoint2.x*cos(0.5))-(m_nPoint2.y*sin(0.5)),(m_nPoint2.x*sin(0.5))+(m_nPoint2.y*cos(0.5)));
}
void CZhouView::bili()
{
CClientDC dc(this);
dc.MoveTo(m_nPoint1.x,m_nPoint1.y);
dc.LineTo(m_nPoint2.x,m_nPoint2.y);
dc.MoveTo(m_nPoint1.x*2,m_nPoint1.y*2);
dc.LineTo(m_nPoint2.x*2,m_nPoint2.y*2);
}
void CZhouView::XCQ()
{
CClientDC dc(this);
dc.MoveTo(m_nPoint1.x,m_nPoint1.y);
dc.LineTo(m_nPoint2.x,m_nPoint2.y);
dc.MoveTo(m_nPoint1.x,m_nPoint1.y);
dc.LineTo(m_nPoint2.x+100,m_nPoint2.y);
}
void CZhouView::DC()
{
CClientDC dc(this);
dc.MoveTo(m_nPoint1.x,m_nPoint1.y);
dc.LineTo(m_nPoint2.x,m_nPoint2.y);
dc.MoveTo(m_nPoint1.y,m_nPoint1.x);
dc.LineTo(m_nPoint2.y,m_nPoint2.x);
}
void CZhouView::YCQ()
{
CClientDC dc(this);
dc.MoveTo(m_nPoint1.x,m_nPoint1.y);
dc.LineTo(m_nPoint2.x,m_nPoint2.y);
dc.MoveTo(m_nPoint1.x,m_nPoint1.y);
dc.LineTo(m_nPoint2.x,m_nPoint2.y+100);
}
//OnLButtonUp(UINT nFlags, CPoint point)
case 8:
pingyi();
break;
case 9:
xuanzhuan();
break;
case 10:
bili();
break;
case 11:
XCQ();
break;
case 12:
YCQ();
break;
case 13:
DC();
break;
dc.MoveTo(m_nPo
显示全部