Реализовать алгоритмы нахождения пересечений в 2D на языке C#
1) Weiler-Atherton The Weiler-Atherton polygon clipping algorithm - Lior Sinai
2) A New Linear Algorithm for Intersecting Convex
Polygons PII: 0146-664X(82)90023-5
Условия:
1) Работает корректно с какой-то разумной погрешностью
2) Каждый алгоритм=отдельный класс, который удовлетворяет интерфейсу IClipper
IClipper.cs:
```
public interface IClipper
{
List<Polygon> Clip(List<Polygon> polygons);
List<Polygon> Clip(Polygon polygon1, Polygon polygon2);
}
```
Polygon.cs:
```
public class Polygon
{
public Polygon() { }
public Polygon(List<PointD> points)
{
Points = points;
}
public List<PointD> Points { get; set; } = new();
}
```
PointD.cs:
```
public struct PointD
{
public double X { get; set; }
public double Y { get; set; }
public PointD(double x, double y)
{
X = x;
Y = y;
}
public Point ToPoint()
{
return new Point((int)X, (int)Y);
}
public override bool Equals(object? obj)
{
return obj is PointD && this == (PointD)obj;
}
public override int GetHashCode()
{
return X.GetHashCode() ^ Y.GetHashCode();
}
public static bool operator ==(PointD a, PointD b)
{
return a.X == b.X && a.Y == b.Y;
}
public static bool operator !=(PointD a, PointD b)
{
return !(a == b);
}
public override string ToString() => $"{{{X:#.####} {Y:#.####}}}";
}
```
3) К каждому алгоритму прикладывается markdown файл, который поясняет суть алгоритма, его ограничения, временную сложность. Пример файла в виде картинки приложен.