问题  图片框中的随机圆圈

温贝托

新成员
已加入
2017年12月2日
留言内容
2
编程经验
1-3
你好!我很想知道如何在任意位置绘制圆圈,但又不能互相干扰。我希望它们彼此分开至少50个像素,但又不要离开图片框的边界。请帮我解决这个问题,我将非常感激!  :D
这是我的代码,它很接近,但是没有做到!

C#:
private void btnCrear_Click(object sender, EventArgs e)        {
            objDraw.Clear(Color.AliceBlue);
            Amount = Convert.ToInt16(txtNodos.Text);
            SolidBrush SBColors = new SolidBrush(Color.Black);
            for (int i = 0; i < Amount; i++)
            {
                PosX = objNum.Next(100, 700);
                PosY = objNum.Next(100, 300);


                if (i > 0)
                {
                    if (PosXB + 50 < 700 && PosYB + 50 < 300)
                    {
                        if (PosX > PosXB + 50 && PosY > PosYB + 50)
                        {
                            objDraw.FillEllipse(SBColors, PosX, PosY, 50, 50);
                            PosXB = PosX;
                            PosYB = PosY;
                            MessageBox.Show("1");
                        }
                        else
                        {
                            objDraw.FillEllipse(SBColors, PosX+50, PosY+50, 50, 50);
                            PosXB = PosX+50;
                            PosYB = PosY+50;
                            MessageBox.Show("2");
                        }
                    }
                    else if (PosXB - 50 > 100 && PosYB - 50 > 100)
                    {
                        if (PosX < PosXB - 50 && PosY < PosYB - 50)
                        {
                            objDraw.FillEllipse(SBColors, PosX, PosY, 50, 50);
                            PosXB = PosX;
                            PosYB = PosY;
                            MessageBox.Show("3");
                        }
                        else
                        {
                            objDraw.FillEllipse(SBColors, PosX-50, PosY, 50, 50);
                            PosXB = PosX-50;
                            PosYB = PosY-50;
                            MessageBox.Show("4");
                        }
                    }
                }
                else
                {
                    objDraw.FillEllipse(SBColors, PosX, PosY, 50, 50);
                    PosXB = PosX;
                    PosYB = PosY;
                }


            }
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,567
地点
悉尼,澳大利亚
编程经验
10+
您应该首先生成适当数量的Point值以表示圆心。这意味着使用随机对象生成X和Y值。生成数字时,请使用适当的最小值和最大值,以使每个圆圈都完全位于PictureBox的范围内。生成有效点后,将其添加到列表中。生成点时,请计算该点与列表中已有的每个点之间的距离,以确保它们至少是一个直径加上额外的间隙。如果不是,则丢弃该Point,否则将其添加到列表中。继续前进,直到获得所有积分。

一旦获得所有点,就可以将所有点平移到该圆的边界框的左上角。那就是您将用来绘制的数据。然后,您可以调用Invalidate来强制执行Paint事件。

在Paint事件处理程序中,遍历List并为其中的每个Point调用DrawEllipse。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,567
地点
悉尼,澳大利亚
编程经验
10+
实际上,考虑到这一点,现在没有点生成中心然后进行平移了,因为最终点和初始点之间的距离无论如何都将是相同的。您也可以只生成左上角开始。在这种情况下,最小值将为0,最大值将小于该方向上的容器尺寸一个直径。
 
最佳 底部