我尝试使用C#在Windows窗体中旋转多边形,下面是代码编写。 请告诉我代码中有什么问题,Windows窗体上没有输出 旋转多边形之前和之后不可见。
public void RotatePolygon(PaintEventArgs e)
{
pp[0] = new Point(624, 414);
pp[1] = new Point(614, 416);
pp[2] = new Point(626, 404);
e.Graphics.DrawPolygon(myPen2, pp);
System.Drawing.Drawing2D.Matrix myMatrix1 = new System.Drawing.Drawing2D.Matrix();
myMatrix.Rotate(45, MatrixOrder.Append);
myMatrix.TransformPoints(pp);
e.Graphics.Transform = myMatrix1;
e.Graphics.DrawPolygon(myPen, pp);
}
由于
答案 0 :(得分:1)
可能存在这样的问题:
[1]你的笔没有颜色/厚度(你在哪里定义它们?)
[2]你的多边形很大,所以你只看到它的内部而不是边框。 - >测试Graphics.FillPolygon-Methode,这样你就可以看到[2]是否正确
答案 1 :(得分:1)
你们正在改变点并改变Graphics对象的变换矩阵 - 你需要做一个或另一个。
你还需要考虑旋转对(0,0)而不是对象的某些部分的影响这一事实 - 你可能也需要翻译。
请记住,TransformPoints只是操作数组中的某些数字 - 您可以使用调试器轻松检查 - 这将是一种比显示不可见对象更有效的技术,并想知道它去了哪里。
从一个小得多的旋转角度(10度,也许是?)开始也可能有助于丢失物体的问题 - 如果你没有移动到目前为止,更容易弄清楚发生了什么。
答案 2 :(得分:1)
如果未经修改,您的代码将无法编译。使用了两个矩阵 - 一个在方法中声明的矩阵(myMatrix1
)附加到图形对象,另一个在方法外声明(myMatrix
没有1
)用于显式转换点阵列
我尝试了所需更改的代码并且它完美无瑕 - 我使用myMatrix1
进行两次转换,有效旋转角度正如预期的那样是指定值的两倍。所以我猜你正在使用两个转换,如果转换后的点在它们开始的地方结束时取消。