public DelaunayEdge FindCommonEdgeWith(Triangle triangle) { DelaunayEdge commonEdge; List <int> commonVertices = new List <int>(); if (this.vertex1 == triangle.vertex1 || this.vertex1 == triangle.vertex2 || this.vertex1 == triangle.vertex3) { commonVertices.Add(this.vertex1); } if (this.vertex2 == triangle.vertex1 || this.vertex2 == triangle.vertex2 || this.vertex2 == triangle.vertex3) { commonVertices.Add(this.vertex2); } if (this.vertex3 == triangle.vertex1 || this.vertex3 == triangle.vertex2 || this.vertex3 == triangle.vertex3) { commonVertices.Add(this.vertex3); } if (commonVertices.Count == 2) { commonEdge = new DelaunayEdge(commonVertices[0], commonVertices[1]); return(commonEdge); } return(null); }
public static List <DelaunayEdge> DelaunayEdges(Triangle superTriangle, List <Triangle> delaunayTriangles) { List <DelaunayEdge> delaunayEdges = new List <DelaunayEdge>(); for (int i = 0; i < delaunayTriangles.Count; i++) { DelaunayEdge edge1 = new DelaunayEdge(delaunayTriangles[i].vertex1, delaunayTriangles[i].vertex2); DelaunayEdge edge2 = new DelaunayEdge(delaunayTriangles[i].vertex2, delaunayTriangles[i].vertex3); DelaunayEdge edge3 = new DelaunayEdge(delaunayTriangles[i].vertex3, delaunayTriangles[i].vertex1); if (!edge1.ContainsVertex(superTriangle.vertex1) && !edge1.ContainsVertex(superTriangle.vertex2) && !edge1.ContainsVertex(superTriangle.vertex3)) { delaunayEdges.Add(edge1); } if (!edge2.ContainsVertex(superTriangle.vertex1) && !edge2.ContainsVertex(superTriangle.vertex2) && !edge2.ContainsVertex(superTriangle.vertex3)) { delaunayEdges.Add(edge2); } if (!edge3.ContainsVertex(superTriangle.vertex1) && !edge3.ContainsVertex(superTriangle.vertex2) && !edge3.ContainsVertex(superTriangle.vertex3)) { delaunayEdges.Add(edge3); } } return(delaunayEdges); }
public static List <VoronoiEdge> VoronoiEdges(List <Triangle> allTriangles) { List <VoronoiEdge> voronoiEdgeList = new List <VoronoiEdge>(); for (int i = 0; i < allTriangles.Count; i++) { for (int j = 0; j < allTriangles.Count; j++) { if (j != i) { DelaunayEdge neighborEdge = allTriangles[i].FindCommonEdgeWith(allTriangles[j]); if (neighborEdge != null) { VoronoiEdge voronoiEdge = new VoronoiEdge(allTriangles[i].center, allTriangles[j].center); if (!voronoiEdgeList.Contains(voronoiEdge)) { voronoiEdgeList.Add(voronoiEdge); } } } } } return(voronoiEdgeList); }