Added: circle class
This commit is contained in:
parent
d066ccbe67
commit
84081e5c1a
148
2020/12/Circle.cs
Normal file
148
2020/12/Circle.cs
Normal file
@ -0,0 +1,148 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
|
||||
namespace System.Drawing
|
||||
{
|
||||
public class Circle
|
||||
{
|
||||
|
||||
public Circle()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public Circle(int x, int y, int width, int height)
|
||||
{
|
||||
this.X = x;
|
||||
this.Y = y;
|
||||
this.Width = width;
|
||||
this.Height = height;
|
||||
}
|
||||
|
||||
public Circle(Rectangle rectangle)
|
||||
{
|
||||
this.X = rectangle.X;
|
||||
this.Y = rectangle.Y;
|
||||
this.Width = rectangle.Width;
|
||||
this.Height = rectangle.Height;
|
||||
}
|
||||
|
||||
public Circle(Point position, Size size)
|
||||
{
|
||||
this.X = position.X;
|
||||
this.Y = position.Y;
|
||||
this.Width = size.Width;
|
||||
this.Height = size.Height;
|
||||
}
|
||||
|
||||
public Circle(Size size)
|
||||
{
|
||||
this.X = 0;
|
||||
this.Y = 0;
|
||||
this.Width = size.Width;
|
||||
this.Height = size.Height;
|
||||
}
|
||||
|
||||
|
||||
public int X { get; set; } = 0;
|
||||
|
||||
public int Y { get; set; } = 0;
|
||||
|
||||
public int Width { get; set; } = 0;
|
||||
|
||||
public int Height { get; set; } = 0;
|
||||
|
||||
public PointF Origin
|
||||
{
|
||||
get
|
||||
{
|
||||
return new PointF()
|
||||
{
|
||||
X = (this.Width / 2) + this.X,
|
||||
Y = (this.Height / 2) + this.Y
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public int MinSideLength => Math.Min(this.Width, this.Height);
|
||||
|
||||
public static PointF GetPointromOrigin(PointF originPosition, Size size)
|
||||
{
|
||||
float offsetX = (size.Width / 2);
|
||||
float offsetY = (size.Height / 2);
|
||||
|
||||
PointF rs = new PointF()
|
||||
{
|
||||
X = originPosition.X,
|
||||
Y = originPosition.Y
|
||||
};
|
||||
|
||||
rs.X -= offsetX;
|
||||
rs.Y -= offsetY;
|
||||
|
||||
return rs;
|
||||
}
|
||||
|
||||
public PointF GetPoint(int deg, int distance)
|
||||
{
|
||||
PointF origin = this.Origin;
|
||||
PointF rs = new PointF()
|
||||
{
|
||||
X = origin.X,
|
||||
Y = origin.Y
|
||||
};
|
||||
|
||||
if (deg == 0)
|
||||
{
|
||||
rs.Y -= distance;
|
||||
}
|
||||
else if (deg == 90)
|
||||
{
|
||||
rs.X += distance;
|
||||
}
|
||||
else if (deg == 180)
|
||||
{
|
||||
rs.Y += distance;
|
||||
}
|
||||
else if (deg == 270)
|
||||
{
|
||||
rs.X -= distance;
|
||||
}
|
||||
else if ((deg > 0) && (deg < 90))
|
||||
{
|
||||
rs.X += (float)(distance * Math.Sin(calcToRad(deg)));
|
||||
rs.Y -= (float)(distance * Math.Cos(calcToRad(deg)));
|
||||
}
|
||||
else if ((deg > 90) && (deg < 180))
|
||||
{
|
||||
rs.X += (float)(distance * Math.Cos(calcToRad(deg - 90)));
|
||||
rs.Y += (float)(distance * Math.Sin(calcToRad(deg - 90)));
|
||||
}
|
||||
else if ((deg > 180) && (deg < 270))
|
||||
{
|
||||
rs.X -= (float)(distance * Math.Sin(calcToRad(deg - 180)));
|
||||
rs.Y += (float)(distance * Math.Cos(calcToRad(deg - 180)));
|
||||
}
|
||||
else if ((deg > 270) && (deg < 360))
|
||||
{
|
||||
rs.X -= (float)(distance * Math.Cos(calcToRad(deg - 270)));
|
||||
rs.Y -= (float)(distance * Math.Sin(calcToRad(deg - 270)));
|
||||
}
|
||||
|
||||
// adjust position
|
||||
rs.X += this.X;
|
||||
rs.Y += this.Y;
|
||||
|
||||
return rs;
|
||||
}
|
||||
|
||||
public void Deflate(int x, int y)
|
||||
{
|
||||
this.Width -= x;
|
||||
this.Height -= y;
|
||||
}
|
||||
|
||||
protected double calcToRad(int deg) => ((Math.PI / 180) * deg);
|
||||
|
||||
}
|
||||
}
|
BIN
2020/12/circle.dia
Normal file
BIN
2020/12/circle.dia
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user