当前位置:C++技术网 > 资讯 > TransformPoints函数理解

TransformPoints函数理解

更新时间:2015-12-07 12:59:33浏览次数:1+次

新建工程,加入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函数用于对点信息进行批量修改的运算原理。
请你好好看看《文字特效处理之文字特效》《汽车里程表的绘制》里的代码,好好理解