C#重绘矩形逻辑

时间:2012-03-14 06:26:48

标签: c# logic

这可能更多的是逻辑问题而不是语法问题,所以我不知道是否有人愿意提供帮助,但我有一个类型为Rectangle的列表,我需要循环往来。

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

                  ___________ 
____              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);
            }
        }

我需要查看当前的矩形,如果下一个矩形更高,那么我知道宽度需要增加但是当它到达低于其当前高度的矩形时需要停止。一旦它到达那个矩形,就需要向后移动,而不是系列中的第一个矩形。

如果您对重绘矩形的更好方法有任何建议或想法,请告诉我。

1 个答案:

答案 0 :(得分: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

等等。最终,您将生成旋转的图案。