Exemple #1
0
        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;
 }
Exemple #3
0
        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);
        }