private bool TryFormTriangle(Segment shortestSegment, Point p, bool existingPoint) { Segment newSegment1 = new Segment(shortestSegment.Start, p); Segment newSegment2 = new Segment(p, shortestSegment.End); List<Segment> SegmentsToAdd = new List<Segment>(); List<Segment> SegmentsToRemove = new List<Segment>(); // Check if triangle can be formed if (this.Front.Contains(newSegment1, cellDistance)) { SegmentsToRemove.Add(newSegment1); } else { // Test if triangle candidate intersects with existing elements if (IsIntersecting(newSegment1)) return false; // Test if segment is outside of the front if (!this.Front.IsPointInside(newSegment1.GetPoint(0.5))) return false; SegmentsToAdd.Add(newSegment1); } if (this.Front.Contains(newSegment2, cellDistance)) { SegmentsToRemove.Add(newSegment2); } else { // Test if triangle candidate intersects with existing elements if (IsIntersecting(newSegment2)) return false; // Test if segment is outside of the front if (!this.Front.IsPointInside(newSegment2.GetPoint(0.5))) return false; SegmentsToAdd.Add(newSegment2); } // update front and form triangle // Remove current segment from the front. this.Front.RemoveSegment(shortestSegment); // Update front with new segments. if (!existingPoint) { this.Points.Add(p); this.Front.Points.Add(p); } foreach (Segment s in SegmentsToAdd) { this.Front.AddSegment(s); } foreach (Segment s in SegmentsToRemove) { this.Front.RemoveSegment(s); } AddTriangle(shortestSegment.Start, shortestSegment.End, p); return true; }