Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }