C#旋转多边形(三角形)

时间:2011-08-18 09:29:59

标签: c# rotation geometry

我有一个绘制多边形的方法,然后将该多边形向右旋转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);

提前致谢。

3 个答案:

答案 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.可能您想使用多边形中心作为旋转中心。