private static bool RecordEars(EarPolygon poly) { LinkedListNode <EarPoint> active = poly.Get(); int NumPoints = poly.NumPoints() - 2; while (poly.NumPoints() >= 3) { int num = poly.NumPoints(); int idx = active.Value.mIndex; do { if (IsConvex(active, poly)) { if (IsEar(active, poly)) { break; } } active = poly.Next(active); } while (idx != active.Value.mIndex); poly.AddResult(poly.Previous(active).Value[0], poly.Previous(active).Value[1], active.Value[0], active.Value[1], poly.Next(active).Value[0], poly.Next(active).Value[1]); active = poly.Next(active); poly.Remove(poly.Previous(active)); continue; } return(true); }
private static bool RecordEars(EarPolygon poly) { LinkedListNode <EarPoint> active = poly.Get(); int NumPoints = poly.NumPoints() - 2; while (poly.NumPoints() >= 3) { int num = poly.NumPoints(); int idx = active.Value.mIndex; //do //{ // if (IsConvex(active, poly)) // { // if (IsEar(active, poly)) // { // break; // } // } // active = poly.Next(active); //} while (idx != active.Value.mIndex); List <LinkedListNode <EarPoint> > candidate = new List <LinkedListNode <EarPoint> >(); do { if (IsConvex(active, poly)) { if (IsEar(active, poly)) { candidate.Add(active); } } active = poly.Next(active); } while (idx != active.Value.mIndex); List <KeyValuePair <int, float> > temp = new List <KeyValuePair <int, float> >(); for (int i = 0; i < candidate.Count; ++i) { LinkedListNode <EarPoint> ear = candidate[i]; float angle = AngleWithUp(ear, poly); temp.Add(new KeyValuePair <int, float>(i, angle)); } temp.Sort((x, y) => { return(-x.Value.CompareTo(y.Value)); }); active = candidate[temp[0].Key]; temp.Clear(); candidate.Clear(); poly.AddResult(poly.Previous(active).Value.mPoint, active.Value.mPoint, poly.Next(active).Value.mPoint); poly.AddResult(poly.Previous(active).Value.mVertex, active.Value.mVertex, poly.Next(active).Value.mVertex); active = poly.Next(active); poly.Remove(poly.Previous(active)); continue; } return(true); }