如何画出旋转的菱形?

时间:2016-01-19 09:31:53

标签: c# algorithm rotation

我在C#中创建一个程序,用于旋转由" +"制作的rhombs。但我不知道如何绘制它们。我自己尝试输入绘图方法,但是我已经卡住了,我只是不知道如何绘制它。我希望代码尽可能简单,没有任何位图或图形。如果有人想出绘图方法,我会很高兴。 我试图通过在循环中找到积分中间点来绘制它,但它没有奏效,所以有人可以帮我吗? Punkt = Point

class romb
{
    private punkt p_up { get; set; } 
    private punkt p_left { get; set; } 
    private punkt p_right { get; set; } 
    private punkt p_down { get; set; } 

  private void MoveOneFrame()
  {
    punkt pivot = new punkt(((this.p_left.Get_x() + this.p_right.Get_x()) / 2), ((this.p_left.Get_y() + this.p_right.Get_y()) / 2));
    this.p_up = Rotate(p_up, pivot, 8);
    this.p_down = Rotate(p_down, pivot, 8);
    this.p_left = Rotate(p_left, pivot, 8);
    this.p_right = Rotate(p_right, pivot, 8);
  }

  private static punkt Rotate(punkt point, punkt pivot, double angleDegree)
  {            
    double angle = angleDegree * Math.PI / 180;
    double cos = Math.Cos(angle);
    double sin = Math.Sin(angle);
    int dx = point.Get_x() - pivot.Get_x();
    int dy = point.Get_y() - pivot.Get_y();
    double x = cos * dx - sin * dy + pivot.Get_x();
    double y = sin * dx + cos * dy + pivot.Get_y();

    punkt rotated = new punkt((int)Math.Round(x), (int)Math.Round(y));
    return rotated;
  }
}

输出: - 每个菱形应围绕枢轴(它们的中心)旋转

      +
     + +
    +   +
   +     +
  +       +
 +         +
+           +        +
 +         +        + +
  +       +        +   +
   +     +        +     +
    +   +        +       +
     + +        +         +
      +        +           +
      +         +         +
     + +         +       +
    +   +         +     +
   +     +         +   +
  +       +         + +
 +         +         +      
+           +   
 +         +
  +       +
   +     +
    +   +
     + +
      +       

1 个答案:

答案 0 :(得分:0)

也许你应该将你的中间结果(punkt.x和punkt.y以及dx和dy)保持为double,并在最终显示它们时将它们舍入为整数。