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
等等。最终将生成旋转的图案