public void AddTriangle(Point2D point, Triangle triangle) { var c = GetCoordinate(point); if (c != null) { m_Hash[c.X, c.Y] = triangle; TriangleCount++; } }
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 TriangleHash(double width, double height, Triangle basicTriangle, int triangleCount = 1) { Width = width; Height = height; m_Size = 2; m_Hash = new Triangle[2,2]; for (int i = 0; i < m_Size; i++) { for (int j = 0; j < m_Size; j++) { m_Hash[i, j] = basicTriangle; } } TriangleCount = triangleCount; }
public void SetNeighbor(int index, Triangle newTriangle) { if (newTriangle != null) { int last = 0; Edge edge = this.Edge(index); for (int i = 0; i < 3; i++) { if (edge.First != newTriangle.Points[i] && edge.Second != newTriangle.Points[i]) { last = i; break; } } newTriangle.Triangles[last] = this; } Triangles[index] = newTriangle; }
private void IncreaseSize() { int newSize = 2 * m_Size; Triangle[,] newHash = new Triangle[newSize,newSize]; for (int i = 0; i < m_Size; i++) { for (int j = 0; j < m_Size; j++) { for (int ii = 0; ii < 2; ii++) { for (int ji = 0; ji < 2; ji++) { newHash[2 * i + ii, 2 * j + ji] = m_Hash[i, j]; } } } } m_Size = newSize; m_Hash = newHash; }
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); }
private Triangle GetNext(Triangle triangle, Point2D target) { for (int i = 0; i < 3; i++) { if (triangle.Triangles[i] != null) { Edge edge = triangle.Edge(i); if (Vect(edge, triangle.Points[i]) * Vect(edge, target) <= 0) { return triangle.Triangles[i]; } } } throw new ApplicationException("Coudn't find next Triangle."); }
private void AddTriangle(Triangle triangle) { triangle.Id = _triangles.Count; _triangles.Add(triangle); }