Example #1
0
        public void AddTriangle(Point2D point, Triangle triangle)
        {
            var c = GetCoordinate(point);

            if (c != null)
            {
                m_Hash[c.X, c.Y] = triangle;
                TriangleCount++;
            }
        }
Example #2
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();
        }
Example #3
0
        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;
        }
Example #4
0
        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;
        }
Example #5
0
        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;
        }
Example #6
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);
        }
Example #7
0
        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.");
        }
Example #8
0
 private void AddTriangle(Triangle triangle)
 {
     triangle.Id = _triangles.Count;
     _triangles.Add(triangle);
 }