C# 使矩形从垂直堆叠到水平,但保持形状

C# 使矩形从垂直堆叠到水平,但保持形状,c#,C#,我已经正确地完成了输入,我所有的矩形都是垂直堆叠的,并且每次绘制一个新的矩形时都有不同的颜色,但是我正在努力使输出看起来像底部的图片。请任何人帮助我走上正确的道路 //List to strore all randomly generated rectangles List<Rectangle> rectangleCollection = new List<Rectangle>(); //Counts the amount of time a re

我已经正确地完成了输入,我所有的矩形都是垂直堆叠的,并且每次绘制一个新的矩形时都有不同的颜色,但是我正在努力使输出看起来像底部的图片。请任何人帮助我走上正确的道路

    //List to strore all randomly generated rectangles
    List<Rectangle> rectangleCollection = new List<Rectangle>();
    //Counts the amount of time a rectangle needs to be drawn
    int count = 0;

    public static Random ran = new Random();

    void CreateRectangle()
    {
        int TallestRectangle = 0; ;


        int PrevRecY = 0;

        Graphics graphic = pictureBox1.CreateGraphics();
        SolidBrush brush;

        foreach (Rectangle rect in rectangleCollection)
        {
            if (rect.Height > TallestRectangle)
                TallestRectangle = rect.Height;
        }

        foreach (Rectangle rect in rectangleCollection)
        {
            graphic.FillRectangle(brush = new SolidBrush(Color.FromArgb(ran.Next(1, 255), ran.Next(1, 255), ran.Next(1, 255))),
                new Rectangle(rect.X + PrevRecY, (TallestRectangle - rect.Height), rect.Width, rect.Height));

            PrevRecY += rect.Width;
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        count = int.Parse(textBox1.Text);
        for (int i = 0; i < count; i++)
        {
            GetRandomRectangle();
        }
        CreateRectangle();
    }

    void GetRandomRectangle()
    {
        Graphics graph = this.CreateGraphics();
        int x = 0;
        int y = 0;

        int width = ran.Next(20, 100);
        int height = ran.Next(30, 150);

        Rectangle rec1 = new Rectangle(x, y, width, height);
        rectangleCollection.Add(rec1);
    }

//列出所有随机生成的矩形
列表矩形集合=新列表();
//计算矩形需要绘制的时间量
整数计数=0;
public static Random ran=new Random();
void CreateRectangle()
{
int TallestRectangle=0;
int-prevercy=0;
Graphics graphic=pictureBox1.CreateGraphics();
固体刷;
foreach(矩形集合中的矩形rect)
{
如果(垂直高度>垂直角度)
TallestRectangle=直线高度;
}
foreach(矩形集合中的矩形rect)
{
graphic.FillRectangle(笔刷=新的SolidBrush(Color.FromArgb(ran.Next(1255),ran.Next(1255),ran.Next(1255)),
新矩形(rect.X+prevercy,(TallestRectangle-rect.Height),rect.Width,rect.Height);
PrevRecY+=矩形宽度;
}
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
count=int.Parse(textBox1.Text);
for(int i=0;i
对于每个矩形,按从最短到最高的顺序排列

  • 制作一个该高度的水平矩形,从高于该高度的所有矩形的左侧开始,在该高度的所有矩形的右侧结束

无论何时创建一个水平矩形,都要将其放置在最高水平矩形的顶部,该矩形位于所创建矩形的下方(就水平位置而言)。

您尝试了什么?你的代码只会产生问题这个问题不是很清楚,可能需要改进,很难理解你遇到的具体问题是什么-你说你在挣扎,但你不知道是什么。一组随机的矩形从左到右排列在同一基线上。输出:输出表示输入矩形所描述的相同区域和结果形状的垂直堆叠矩形的最小数量。您为@Amicable所做的一切都是重写问题。我想他们想知道到目前为止你都做了些什么。一般来说,如果你有一个你正在解决的特定问题,例如代码不起作用等,这个网站工作得更好。你不应该只是问“我怎么做X?”。我已经给了你一个大致的方法。我建议你尝试对我描述的内容进行编码,如果你有更具体的问题,请发表另一篇文章。你能告诉我实现这一目标的原因吗?我将如何从最短到最高排列它们?你不是在排列它们,只是为了循环而排列它们。您只需比较矩形.Top,因为它们都从同一个底点开始