private void RunJarvis() { calculatedPoints = new List <Point>(); Point originalPoint = GetLeftPoint(); Point selectedPoint = null; Vector3 vectorSource = Vector3.up; Vector3 vectorTest = Vector3.zero; int maxIteration = 10000; int currentIndex = 0; while (originalPoint != selectedPoint && ++currentIndex < maxIteration) { if (selectedPoint == null) { selectedPoint = originalPoint; } if (calculatedPoints.Contains(selectedPoint)) { Debug.Log("Already exist"); } else { calculatedPoints.Add(selectedPoint); } selectedPoint = points.OrderBy(calculatedPoint => { if (calculatedPoint == selectedPoint) { return(360); } vectorTest = calculatedPoint.GetPosition() - selectedPoint.GetPosition(); return(MathUtils.AngleClockwise(vectorSource, vectorTest)); }).First(); vectorSource = vectorTest; } }