/// <summary> /// Return a tree that contains left trapezoid and 2 right trapezoids /// </summary> /// <param name="segment"></param> /// <returns></returns> public Node To3TrapsLeft_2Right(Segment segment) { // Vertex node Node root = new VertexNode(segment.LeftVertex); // Segment node Node segmentNode = new SegmentNode(segment); // Trapezoid nodes Trapezoid leftTrap = new Trapezoid(Trapezoid.Leftp, segment.LeftVertex, Trapezoid.Top, Trapezoid.Bottom); Trapezoid higherTrap = new Trapezoid(segment.LeftVertex, segment.RightVertex, Trapezoid.Top, segment); Trapezoid lowerTrap = new Trapezoid(segment.LeftVertex, segment.RightVertex, segment, Trapezoid.Bottom); Node higherTrapNode = new TrapezoidalNode(higherTrap); Node lowerTrapNode = new TrapezoidalNode(lowerTrap); Node leftTrapNode = new TrapezoidalNode(leftTrap); higherTrap.SetNeighbor(leftTrap, leftTrap, null, null); higherTrap.Node = higherTrapNode; lowerTrap.SetNeighbor(leftTrap, leftTrap, null, null); lowerTrap.Node = lowerTrapNode; leftTrap.SetNeighbor(Trapezoid.HigherLeftNeighbor, Trapezoid.LowerLeftNeighbor, higherTrap, lowerTrap); leftTrap.Node = leftTrapNode; segmentNode.SetChildren(ref higherTrapNode, ref lowerTrapNode); root.SetChildren(ref leftTrapNode, ref segmentNode); return(root); }
/// <summary> /// Return a tree that contains right trapezoid and 2 left trapezoids /// </summary> /// <param name="segment"></param> /// <returns></returns> public Node To3TrapsRight_2Left(Segment segment) { // Vertex node Node root = new VertexNode(segment.RightVertex); // Segment node Node segmentNode = new SegmentNode(segment); // Trapezoid nodes Trapezoid higherTrap = new Trapezoid(segment.LeftVertex, segment.RightVertex, Trapezoid.Top, segment); Trapezoid lowerTrap = new Trapezoid(segment.LeftVertex, segment.RightVertex, segment, Trapezoid.Bottom); Trapezoid rightTrap = new Trapezoid(segment.RightVertex, Trapezoid.Rightp, Trapezoid.Top, Trapezoid.Bottom); Node higherTrapNode = new TrapezoidalNode(higherTrap); Node lowerTrapNode = new TrapezoidalNode(higherTrap); Node rightTrapNode = new TrapezoidalNode(rightTrap); higherTrap.SetNeighbor(null, null, rightTrap, rightTrap); higherTrap.Node = higherTrapNode; lowerTrap.SetNeighbor(null, null, rightTrap, rightTrap); lowerTrap.Node = lowerTrapNode; rightTrap.SetNeighbor(higherTrap, lowerTrap, Trapezoid.HigherRightNeighbor, Trapezoid.LowerRightNeighbor); rightTrap.Node = rightTrapNode; segmentNode.SetChildren(ref higherTrapNode, ref lowerTrapNode); root.SetChildren(ref segmentNode, ref rightTrapNode); return(root); }
/// <summary> /// Return a tree that contains 4 trapezoids /// </summary> /// <param name="segment"></param> /// <returns></returns> public Node To4Traps(Segment segment) { // Vertex nodes Node root = new VertexNode(segment.LeftVertex); Node rightVertexNode = new VertexNode(segment.RightVertex); // Segment node Node segmentNode = new SegmentNode(segment); // Trapezoid nodes Trapezoid leftTrap = new Trapezoid(Trapezoid.Leftp, segment.LeftVertex, Trapezoid.Top, Trapezoid.Bottom); Trapezoid higherCenterTrap = new Trapezoid(segment.LeftVertex, segment.RightVertex, Trapezoid.Top, segment); Trapezoid lowerCenterTrap = new Trapezoid(segment.LeftVertex, segment.RightVertex, segment, Trapezoid.Bottom); Trapezoid rightTrap = new Trapezoid(segment.RightVertex, Trapezoid.Rightp, Trapezoid.Top, Trapezoid.Bottom); Node leftTrapNode = new TrapezoidalNode(leftTrap); Node higherCenterTrapNode = new TrapezoidalNode(higherCenterTrap); Node lowerCenterTrapNode = new TrapezoidalNode(lowerCenterTrap); Node rightTrapNode = new TrapezoidalNode(rightTrap); leftTrap.SetNeighbor(Trapezoid.HigherLeftNeighbor, Trapezoid.LowerLeftNeighbor, higherCenterTrap, lowerCenterTrap); leftTrap.Node = leftTrapNode; higherCenterTrap.SetNeighbor(leftTrap, leftTrap, rightTrap, rightTrap); higherCenterTrap.Node = higherCenterTrapNode; lowerCenterTrap.SetNeighbor(leftTrap, leftTrap, rightTrap, rightTrap); lowerCenterTrap.Node = lowerCenterTrapNode; rightTrap.SetNeighbor(higherCenterTrap, lowerCenterTrap, Trapezoid.HigherRightNeighbor, Trapezoid.LowerRightNeighbor); rightTrap.Node = rightTrapNode; segmentNode.SetChildren(ref higherCenterTrapNode, ref lowerCenterTrapNode); rightVertexNode.SetChildren(ref segmentNode, ref rightTrapNode); root.SetChildren(ref leftTrapNode,ref rightVertexNode); return root; }