新建工程,加入GDI+程序必备的代码,你可以在之前我写的文章去找,有介绍。新建菜单项,并新建子菜单项,建立消息响应:
void C油表View::OnMatrixtranslateformpoints()
{
// TODO: 在此添加命令处理程序代码
Graphics graphics(this->m_hWnd);
this->RedrawWindow();
SolidBrush redBrush(Color::Red);
SolidBrush blueBrush(Color::Blue);
Pen pen1(Color(255, 0, 0, 255), 2);
Pen pen2(Color(255, 255, 0, 0), 1);
//////定义构成曲线的点坐标
Point points[5] =
{
Point(50,100),
Point(100,50),
Point(150,125),
Point(200,100),
Point(250,125)
};
//////绘制点信息
graphics.DrawCurve(&pen1, points, 5);
//////绘制曲线定义点信息
for (int i = 0; i < 5; i++)
{
graphics.FillEllipse(&blueBrush, points[i].X - 5, points[i].Y - 5, 10, 10);
}
//////定义一个在竖直方向上缩放因子为0.5的矩阵
Matrix matrix(1.0, 0.0, 0.0, 0.5, 0.0, 0.0);
//////对points数组中的每一个成员进行矩阵运算
matrix.TransformPoints(points, 5);
//////绘制曲线(使用变换后)
graphics.DrawCurve(&pen2, points, 5);
/////再次绘制曲线定义点信息
for (int i = 0; i < 5; i++)
{
graphics.FillEllipse(&redBrush, points[i].X - 5, points[i].Y - 5, 10, 10);
}
}
代码实现:
两条曲线的定义点在水平位置上是相同的,只不过定义点的垂直方向的位置发生了变化,因而引起两条曲线的波动区间不同。以第2个定义点(100,50)为例,上述代码中,点信息组再修改第二个点时所做的矩阵运算为:
上述矩阵的运算结果表明,在对点信息组进行矩阵运算后,第二个定义点的坐标已经变为了(100,25),相对于运算之前的坐标(100,25),运算后的点的位置已经发生了改变。
这边是TransformPoints函数用于对点信息进行批量修改的运算原理。
请你好好看看《文字特效处理之文字特效》《汽车里程表的绘制》里的代码,好好理解