I am a student learning C# at school and have a project due in our Graphics Unit. 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);
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#. 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();
}
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.