public void AddTriangle(DelaunayTriangle t) { this._triangles.Add(t); }
/// <summary> /// Update neighbor pointers /// </summary> /// <param name="p1">Point 1 of the shared edge</param> /// <param name="p2">Point 2 of the shared edge</param> /// <param name="t">This triangle's new neighbor</param> private void MarkNeighbor(TriangulationPoint p1, TriangulationPoint p2, DelaunayTriangle t) { int i = this.EdgeIndex(p1, p2); if (i == -1) { throw new Exception("Error marking neighbors -- t doesn't contain edge p1-p2!"); } this.Neighbors[i] = t; }
/// <summary> /// Exhaustive search to update neighbor pointers /// </summary> public void MarkNeighbor(DelaunayTriangle t) { // Points of this triangle also belonging to t bool a = t.Contains(this.Points[0]); bool b = t.Contains(this.Points[1]); bool c = t.Contains(this.Points[2]); if (b && c) { this.Neighbors[0] = t; t.MarkNeighbor(this.Points[1], this.Points[2], this); } else if (a && c) { this.Neighbors[1] = t; t.MarkNeighbor(this.Points[0], this.Points[2], this); } else if (a && b) { this.Neighbors[2] = t; t.MarkNeighbor(this.Points[0], this.Points[1], this); } else { throw new Exception("Failed to mark neighbor, doesn't share an edge!"); } }
/// <param name="t">Opposite triangle</param> /// <param name="p">The point in t that isn't shared between the triangles</param> public TriangulationPoint OppositePoint(DelaunayTriangle t, TriangulationPoint p) { Debug.Assert(t != this, "self-pointer error"); return this.PointCWFrom(t.PointCWFrom(p)); }
public void MarkEdge(DelaunayTriangle triangle) { for (int i = 0; i < 3; i++) { if (this.EdgeIsConstrained[i]) { triangle.MarkConstrainedEdge(this.Points[(i + 1) % 3], this.Points[(i + 2) % 3]); } } }