private static List <CoorinateFloat> ConvexPolygon(List <CoorinateFloat> coordinates) { var firstPoint = FindStartPoint(coordinates); var pointsList = SortedPointsByCos(coordinates, firstPoint); var niceFigure = new List <CoorinateFloat>(); niceFigure.Add(firstPoint); niceFigure.Add(pointsList.First()); var firstPointForAlgo = firstPoint; var currentVektor = new Vektor(firstPointForAlgo, pointsList.First()); foreach (var point in pointsList) { var nextVektor = new Vektor(firstPointForAlgo, point); if (VektorOperation.IsNiceComposition(currentVektor, nextVektor)) { currentVektor = nextVektor; firstPointForAlgo = point; niceFigure.Add(point); } } niceFigure.Add(firstPoint); return(niceFigure); }
private static List <CoorinateFloat> SortedPointsByCos(List <CoorinateFloat> coordinates, CoorinateFloat firstPoint) { var vektorList = GetVektors(coordinates, firstPoint); var verticalVektor = new Vektor(firstPoint, new CoorinateFloat(firstPoint.X, firstPoint.Y + 1)); var sortedVektors = vektorList.OrderByDescending(z => VektorOperation.Cosinus(verticalVektor, z)).Select(z => z.PointEnd).ToList(); return(sortedVektors); }