private void AddNewPoint(Point2D newPoint) { var point = new StructurePoint(newPoint); _points.Add(point); Triangle triangle = SearchTriangle(point); var newTriangles = new Triangle[3]; for (int i = 0; i < 2; i++) { newTriangles[i] = new Triangle(); } newTriangles[2] = triangle; for (int i = 0; i < 3; i++) { Edge edge = triangle.Edge(i); newTriangles[i].Points = new[] {edge.First, edge.Second, point}; newTriangles[i].Triangles = new[] { newTriangles[(i + 1) % 3], newTriangles[(i + 2) % 3], triangle.Triangles[i] }; if (triangle.Triangles[i] != null) { for (int j = 0; j < 3; j++) { if (triangle.Triangles[i].Triangles[j] == triangle) { triangle.Triangles[i].Triangles[j] = newTriangles[i]; break; } } } } /*newTriangles[2].Id = triangle.Id; Triangles[triangle.Id] = newTriangles[2]; m_TrianglesToCheck.Enqueue(newTriangles[2]);*/ for (int i = 0; i < 2; i++) { AddTriangle(newTriangles[i]); m_TrianglesToCheck.Enqueue(newTriangles[i]); } m_TrianglesToCheck.Enqueue(newTriangles[2]); CheckTriangles(); }
public StructurePoint(StructurePoint point) : base(point) { IsDummy = point.IsDummy; }
private void InitializeBoard(double maxX, double maxY) { const int border = 10000; var lb = new StructurePoint(-border, -border) {IsDummy = true}; var lt = new StructurePoint(-border, maxY + border) {IsDummy = true}; var rb = new StructurePoint(maxX + border, -border) {IsDummy = true}; var rt = new StructurePoint(maxX + border, maxY + border) {IsDummy = true}; _points.AddRange(new[] {lb, lt, rb, rt}); var top = new Triangle(); var bottom = new Triangle(); top.Points = new[] {lb, rb, rt}; top.Triangles = new[] {null, bottom, null}; bottom.Points = new[] {rt, lt, lb}; bottom.Triangles = new[] {null, top, null}; AddTriangle(top); AddTriangle(bottom); m_Hash = new TriangleHash(maxX, maxY, top, 2); }