C#重绘矩形逻辑

C#重绘矩形逻辑,c#,logic,C#,Logic,这可能更多的是一个逻辑问题,而不是语法问题,所以我不知道是否有人愿意帮忙,但我有一个矩形类型列表,我需要来回循环 该列表包含从左到右的随机矩形范围,宽度和高度随机,例如 ___________ ____ 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矩形图形=绘图表面;
对于(int x=0;x
我试图使用下面的代码来旋转矩形,同时保持相同的形状,但我显然会出现超出范围的错误

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);
            }
        }
Graphics矩形图形=绘图表面;
int-previousX=0;
整数宽度=0;
整数高度=0;
int xCoordinate=0;
int yCoordinate=0;
对于(int i=0;i矩形[i+1].Height))
{
宽度=矩形[i]。宽度;
高度=矩形[i]。高度-矩形[i+1]。高度;
xCoordinate=矩形[i].X;
Y坐标=250-高度;
矩形DrawRec=myRectangleClass.MyRectangle(xCoordinate,yCoordinate,width,height);
矩形图形.DrawRectangle(画笔,DrawRec);
}
}
我需要看看当前的矩形,如果下一个矩形更高,那么我知道宽度需要增加,但是当它到达一个低于当前高度的矩形时,它需要停止。一旦到达该矩形,它需要向后移动,以防它不是系列中的第一个矩形


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

与其通过旋转它们来重复使用矩形,不如将它们视为用于生成正确输出矩形的输入

另一种简化的方法是将所需的矩形切掉,而不是试图构建它们

这里有一个简单的算法。首先,你将需要一个曲奇削减形状所作的反转模式。这是饼干的形状:

____________________________
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###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
1__1##1_______1###1         1
1_____________1###1_________1
1___________________________1
等等。最终将生成旋转的图案