2012-03-14 112 views
1

这可能是更多的逻辑问题比语法,所以我不知道是否有人愿意帮助,但我有一个类型的矩形列表,我需要循环回来和转发。C#重绘矩形逻辑

该列表包含从左到右随机宽度和高度的随机范围的矩形,例如,

    ___________ 
____    l   l 
l l    l   l 
l l ________ l   l 
l l___l  l l   l 
l l l  l___l   l 
l__l___l______l___l_________l 

我需要旋转矩形,使它们看起来像下面

    ___________ 
____    l   l 
l l    l   l 
l l ________ l   l 
l__l___l______l l   l 
l_____________l___l_________l 
l___________________________l 

因此,我认为这样做最简单的方法是采取第一个矩形,并把它比作下一个沿。然而,当我试图让下一个长方形的值一起我卡住,因为我要出去的可能的索引范围

这是绘制其作品的原始矩形的代码,因为它是为了

Graphics RectangleGraphics = DrawingSurface; 

      for (int x = 0; x < userInput; ++x) 
      { 
       int Height = myRectangleClass.genHeight(); 
       int Width = myRectangleClass.genWidth(); 
       RectangleGraphics.DrawRectangle(Pen, myRectangleClass.MyRectangle(startPositionX, (450 - Height), Width, Height)); 

       ReadWrite.writeOutput(startPositionX, (450 - Height), Width, Height); 
       startPositionX = startPositionX + Width; 
      } 

我尝试使用下面的代码,同时保持相同的形状旋转矩形,但我显然得到超出范围错误

Graphics RectangleGraphics = DrawingSurface; 

     int previousX = 0; 
     int width = 0; 
     int height = 0; 
     int xCoordinate = 0; 
     int yCoordinate = 0; 


     for (int i = 0; i < Rectangles.Count; ++i) 
     { 
      if ((Rectangles[i].X < Rectangles[i + 1].X) && (Rectangles[i].Height > Rectangles[i + 1].Height)) 
      { 
       width = Rectangles[i].Width; 
       height = Rectangles[i].Height - Rectangles[i + 1].Height; 
       xCoordinate = Rectangles[i].X; 
       yCoordinate = 250 - height; 

       Rectangle DrawRec = myRectangleClass.MyRectangle(xCoordinate, yCoordinate, width, height); 
       RectangleGraphics.DrawRectangle(Pen, DrawRec); 
      } 
     } 

我需要看看目前的矩形,如果未来矩形更高,然后我知道widt h需要增加,但当它到达一个低于当前高度的矩形时,它需要停止。一旦到达该矩形,它就需要向后移动而不是该系列中的第一个矩形。

如果您有更好的方法来重绘矩形的任何建议或想法,请让我知道。

回答

0

而不是通过旋转矩形重新使用矩形,更容易将它们视为输入,用于生成正确的输出矩形。

使这个更简单的另一种方法是切出所需的矩形,而不是尝试构建它们。

这是一个简单的算法。首先,你需要一个饼干切割的形状,通过颠倒你的图案。这里的饼干,切成形状:

____________________________ 
1 1 1  1 1_________1 
1__1 1  1 1 
    1 1  1 1 
    1 1_______1 1 
    1__1  1 1 
       1___1 

这是从原来的形成:

    ___________ 
____    l   l 
l l    l   l 
l l ________ l   l 
l l___l  l l   l 
l l l  l___l   l 
l__l___l______l___l_________l 

现在用矩形开始整个区域的大小

____________________________ 
1       1 
1       1 
1       1 
1       1 
1       1 
1       1 
1___________________________1 

从以最高的矩形切割机:

   _____  
       1 1  
       1 1 
       1 1 
       1 1 
       1 1 
       1___1 

用它来划分大矩形,如下所示:

____________________________ 
1    1###1   1 
1    1###1   1 
1  1  1###1 2 1 
1    1###1   1 
1    1###1   1 
1_____________1###1_________1 
1__________3________________1 

现在,您的输出中有3个矩形。

通过从切割器采取的下一个最大的矩形继续:

____ 
    1 1  
    1 1  
    1 1  
    1 1 
    1__1 

计算其输出矩形它是在(它只会在一个),并用它来划分该矩形:

____________________________ 
1 1##1  1###1   1 
1 1##1  1###1   1 
1 1##1  1###1   1 
1 1##1  1###1   1 
1__1##1_______1###1   1 
1_____________1###1_________1 
1___________________________1 

依此类推。最终你会产生旋转的模式。