我有一个绘制多边形的方法,然后将该多边形向右旋转90度,使其原始顶点现在指向右侧。
这是绘制多边形(三角形)的代码,我怎么会因为旋转这个而丢失。
Point[] points = new Point[3];
points[0] = new Point((int)top, (int)top);
points[1] = new Point((int)top - WIDTH / 2, (int)top + HEIGHT);
points[2] = new Point((int)top + WIDTH / 2, (int)top + HEIGHT);
paper.FillPolygon(normalBrush, points);
提前致谢。
答案 0 :(得分:5)
http://msdn.microsoft.com/en-us/library/s0s56wcf.aspx#Y609
public void RotateExample(PaintEventArgs e)
{
Pen myPen = new Pen(Color.Blue, 1);
Pen myPen2 = new Pen(Color.Red, 1);
// Draw the rectangle to the screen before applying the transform.
e.Graphics.DrawRectangle(myPen, 150, 50, 200, 100);
// Create a matrix and rotate it 45 degrees.
Matrix myMatrix = new Matrix();
myMatrix.Rotate(45, MatrixOrder.Append);
// Draw the rectangle to the screen again after applying the
// transform.
e.Graphics.Transform = myMatrix;
e.Graphics.DrawRectangle(myPen2, 150, 50, 200, 100);
}
您可以使用Matrix类的TransformPoints方法旋转点
答案 1 :(得分:2)
有关旋转矩阵的详细说明,请参阅this informative Wikipedia article。当旋转90度时,我们注意到 cos 90 折叠为零,产生以下简单变换,其中 x'和 y'是旋转坐标并且< em> x 和 y 是先前的坐标。
x' = -y
y' = x
在您的示例中应用此简单替换会产生以下代码。我还使用了速记集合初始化表达式来增加可读性。
var points = new[]
{
new Point(-(int) top, (int) top),
new Point((int) -(top + HEIGHT), (int) top - WIDTH/2),
new Point((int) -(top + HEIGHT), (int) top + WIDTH/2)
};
paper.FillPolygon(normalBrush, points);
我还建议使用例如Anton Rorres, et al来阅读线性代数。
答案 2 :(得分:0)
如果rotate every point,您可以旋转多边形。您还必须找到您的旋转中心O.可能您想使用多边形中心作为旋转中心。