//逐点插入法2 public Edge[] PointByPointInsertion() { EdgeSet sEdgeSet = new EdgeSet(); TriangleSet sTriangleSet = new TriangleSet(); MinBoundRect sMBR = this.mPointSet.MBR; double width = sMBR.MaxX - sMBR.MinX; double height = sMBR.MaxY - sMBR.MinY; double middlePointX = (sMBR.MaxX + sMBR.MinX) / 2; double middlePointY = sMBR.MinY; DataPoint P0 = new DataPoint(-1, "P0", middlePointX - width, middlePointY, 0); DataPoint P1 = new DataPoint(-2, "P1", middlePointX + width, middlePointY, 0); DataPoint P2 = new DataPoint(-3, "P2", middlePointX, middlePointY + 2 * height, 0); Triangle T0 = new Triangle(P0, P1, P2, -1); sTriangleSet.AddTriangle(T0); sEdgeSet.AddEdge(new Edge(P0, P1)); sEdgeSet.AddEdge(new Edge(P1, P2)); sEdgeSet.AddEdge(new Edge(P1, P0)); foreach (var point in mPointSet.PointList) { Triangle CurTri = sTriangleSet.GetPointInsidesTri(point); if (CurTri != null) { } } return(sEdgeSet.EdgeList.ToArray()); }
private void AddEdge(Vector3Int p0, Vector3Int p1, Vector3Int p2, Voxel v1, Voxel v2, EdgeSet edges) { Edge edge = edges.GetEdge(p1, p2); if (edge != null) { edge.blocks.Add(p0); } else { edge = new Edge(); edge.blocks = new List <Vector3Int>(); edge.blocks.Add(p0); edge.edgePos1 = p1; edge.edgePos2 = p2; edge.voxel1 = v1; edge.voxel2 = v2; edges.AddEdge(edge); } }