Пример #1
0
        public static void SetVertexType(Vertex v)
        {
            Vertex next = null;
            Vertex prev = null;

            double nextX = 0;
            double nextY = 0;

            double prevX = 0;
            double prevY = 0;

            double myX = 0;
            double myY = 0;

            myX = v.GetX();
            myY = v.GetY();

            next = v.GetNextVertex();
            prev = v.GetPrevVertex();

            nextX = next.GetX();
            nextY = next.GetY();

            prevX = prev.GetX();
            prevY = prev.GetY();

            if (nextX == myX)
            {
                nextX += 0.01;
            }

            if (nextY == myY)
            {
                nextY -= 0.01;
            }

            if (prevX == myX)
            {
                prevX -= 0.01;
            }

            if (prevY == myY)
            {
                prevY -= 0.01;
            }

            if ((prevY < myY && prevX < myX) && (nextY < myY && myX < nextX)) //PEAK
            {
                v.Type = Vertex.VertexType.Split;
            }
            else if ((prevY > myY && myX < prevX) && (nextY > myY && nextX < myX)) //VALLEY
            {
                v.Type = Vertex.VertexType.Split;
            }
            else if ((prevY > myY && myX > prevX) && (myY > nextY && myX > nextX)) //>
            {
                v.Type = Vertex.VertexType.Split;
            }
            else if ((prevY < myY && prevX > myX) && (myY < nextY && nextX > myX)) //<
            {
                v.Type = Vertex.VertexType.Split;
            }
            else
            {
                v.Type = Vertex.VertexType.Edge;
            }
        }
Пример #2
0
        public static Intersection GetClosestIntersection(Vertex v)
        {
            Vertex next = v.GetNextVertex();
            Vertex prev = v.GetPrevVertex();

            Vertex nextIntersection = MathLibrary.GetIntersectionPoint(new LineSegment(next, next.AngleBisector), new LineSegment(v, v.AngleBisector));
            Vertex prevIntersection = MathLibrary.GetIntersectionPoint(new LineSegment(prev, prev.AngleBisector), new LineSegment(v, v.AngleBisector));

            Vertex.VertexType type = Vertex.VertexType.Undefined;

            if (MathLibrary.GetDistanceBetweenLineAndVertex(v, next, nextIntersection) < MathLibrary.GetDistanceBetweenLineAndVertex(v, prev, prevIntersection))
            {
                if (v.Type == Vertex.VertexType.Split || next.Type == Vertex.VertexType.Split)
                    type = Vertex.VertexType.Split;
                else
                    type = Vertex.VertexType.Edge;

                Intersection i = new Intersection(nextIntersection.GetX(), nextIntersection.GetY(), next, v, type, next.NextLineSegment, v.PrevLineSegment);
                return i;
            }
            else
            {
                if (v.Type == Vertex.VertexType.Split || prev.Type == Vertex.VertexType.Split)
                    type = Vertex.VertexType.Split;
                else
                    type = Vertex.VertexType.Edge;

                Intersection i = new Intersection(prevIntersection.GetX(), prevIntersection.GetY(), v, prev, type, prev.PrevLineSegment, v.NextLineSegment);
                return i;
            }
        }
Пример #3
0
        public void TestSetPrevVertex()
        {
            Vertex v1 = new Vertex(0, 1);
            Vertex v2 = new Vertex(1, 1);

            Assert.IsNull(v1.GetPrevVertex());

            v1.SetPrevVertex(v2);

            Assert.AreEqual(v2, v1.GetPrevVertex());
        }
Пример #4
0
        public void Insert(Vertex newVertex, Vertex prevVertex, Vertex nextVertex)
        {
            Vertex prev = prevVertex.GetPrevVertex();
            Vertex next = nextVertex.GetNextVertex();

            prev.SetNextVertex(newVertex);
            newVertex.SetPrevVertex(prev);

            next.SetPrevVertex(newVertex);
            newVertex.SetNextVertex(next);

            if (prevVertex.Equals(this.startVertex))
                startVertex = newVertex;

            if (nextVertex.Equals(this.startVertex))
                startVertex = nextVertex.GetNextVertex();

            if (nextVertex.Equals(this.endVertex))
                endVertex = newVertex;

            length--;
        }
Пример #5
0
 public void TestNullPrevAndNextNeighbor()
 {
     Vertex v = new Vertex(0, 1);
     Assert.IsNull(v.GetPrevVertex());
     Assert.IsNull(v.GetNextVertex());
 }