簡體   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