简体   繁体   English

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

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

I am a student learning C# at school and have a project due in our Graphics Unit.我是一名在学校学习 C# 的学生,在我们的图形单元有一个项目到期。 I have created a Christmas tree using points and filled it in. Now I'm looking to created ellipse ornaments within the range I have already declared in the tree.我已经使用点创建了一棵圣诞树并将其填充。现在我希望在我已经在树中声明的范围内创建椭圆装饰。 Is there a way to make these ellipses only within my tree, and to have them change based on a random number generator within the tree?有没有办法只在我的树中制作这些椭圆,并根据树中的随机数生成器让它们改变? Thank you.谢谢你。

Here is my code for the tree.这是我的树代码。 The ellipses I made are for snowflakes.我做的椭圆是雪花。 SolidBrush green = new SolidBrush(Color.Green); 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);
    }

Like I said, I very inexperienced in this area of C#.就像我说的,我在 C# 的这个领域非常缺乏经验。 Thank you谢谢

Try something like that:尝试这样的事情:

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++;
    }
}

you need to implement a method which tests if your point is in your range.您需要实现一种方法来测试您的点是否在您的范围内。 With no code of you I can't help you with that.没有你的代码,我无法帮助你。

Try this...尝试这个...

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