繁体   English   中英

如何在设定范围内的随机点绘制椭圆?

[英]How to draw an ellipse at random points within a set range?

我是一名在学校学习 C# 的学生,在我们的图形单元有一个项目到期。 我已经使用点创建了一棵圣诞树并将其填充。现在我希望在我已经在树中声明的范围内创建椭圆装饰。 有没有办法只在我的树中制作这些椭圆,并根据树中的随机数生成器让它们改变? 谢谢你。

这是我的树代码。 我做的椭圆是雪花。 SolidBrush green = new SolidBrush(Color.Green);

    Pen greentree = new Pen(Color.Green);

    Point[] christmastree = new Point[11];
    christmastree[0] = new Point(518, 400);
    christmastree[1] = new Point(620, 300);
    christmastree[2] = new Point(549, 300);
    christmastree[3] = new Point(645, 185);
    christmastree[4] = new Point(607, 185);
    christmastree[5] = new Point(673, 102);
    christmastree[6] = new Point(744, 185);
    christmastree[7] = new Point(706, 185);
    christmastree[8] = new Point(793, 300);
    christmastree[9] = new Point(720, 300);
    christmastree[10] = new Point(835, 400);
    g.DrawPolygon(greentree, christmastree);
    g.FillPolygon(green, christmastree);

    //Snow
    Random r = new Random();
    SolidBrush snowsb = new SolidBrush(Color.White);
    for(int i = 1; i <= 40; i++)
    {
        int snowflake_x = r.Next(1000);
        int snowflake_y = r.Next(500);
        g.FillEllipse(snowsb, snowflake_x, snowflake_y, 4,4);
    }

就像我说的,我在 C# 的这个领域非常缺乏经验。 谢谢

尝试这样的事情:

Random r = new Random();

// Number of ellipses
int ellipseCount = 0;

// Loop for setting a specified amount of ellipses
while (ellipseCount < 10)
{

    // New random point 
    Point p = new Point(r.Next(0, 300), r.Next(0,300));
    // check if point is in my range
    if (p.IsInMyRange())
    {
         Ellipse e = new Ellipse {Width = 10, Height = 10};
         // Implement: set coordinates to ellipse

         ellipseCount++;
    }
}

您需要实现一种方法来测试您的点是否在您的范围内。 没有你的代码,我无法帮助你。

尝试这个...

namespace Baum
{
    using System;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Windows.Forms;

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

            PointF[] tree = new PointF[]
            {
                new PointF(12, 0),
                new PointF(16, 4),
                new PointF(13, 4),
                new PointF(19, 11),
                new PointF(13, 11),
                new PointF(21, 20),
                new PointF(3, 20),
                new PointF(11, 11),
                new PointF(5, 11),
                new PointF(11, 4),
                new PointF(8, 4)
            };

            PointF[] stump = new PointF[]
            {
                new PointF(10, 20),
                new PointF(14, 20),
                new PointF(14, 27),
                new PointF(19, 27),
                new PointF(19, 30),
                new PointF(6, 30),
                new PointF(6, 27),
                new PointF(10, 27)
            };

            using (GraphicsPath path = new GraphicsPath())
            {
                path.AddPolygon(tree);
                Matrix m = new Matrix();
                m.Scale(20, 20);
                path.Transform(m);
                e.Graphics.FillPath(Brushes.Green, path);

                foreach (PointF p in path.PathPoints)
                {
                    int s = 15;
                    PointF q = p;
                    q.X -= (s / 2);
                    q.Y -= (s / 2);

                    if (new Random(Guid.NewGuid().GetHashCode()).Next(0, tree.Length) > tree.Length / 2)
                    {
                        e.Graphics.FillEllipse(Brushes.Red, new RectangleF(q.X, q.Y, s, s));
                    }
                }
            }

            using (GraphicsPath path = new GraphicsPath())
            {
                path.AddPolygon(stump);
                Matrix m = new Matrix();
                m.Scale(20, 20);
                path.Transform(m);
                e.Graphics.FillPath(Brushes.Brown, path);
            }

            System.Threading.Thread.Sleep(500);
            Refresh();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM