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