C#重绘矩形逻辑
本文关键字: | 更新日期: 2023-09-27 18:27:39
这可能更多的是一个逻辑问题,而不是语法问题,所以我不知道是否有人愿意帮忙,但我有一个矩形类型的列表,我需要来回循环。
该列表包含从左到右的具有随机宽度和高度的矩形的随机范围,例如
___________
____ 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 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
等等。最终你会生成旋转的图案。