示例#1
0
        public static void ChangeRingNode(RingNodes CurrentRN, bool isExpanding)
        {
            //First we find a new node (Expand or Collapse we start with expand)
            //Change this node with the other and change the clockwise and anticlockwise
            //Determine poisition of nodes
            //Sensor oldRingNode = CurrentRN.Node;
            Sensor newRingNode = FindNewRingNodeReplacement(CurrentRN);
            Sensor clock       = CurrentRN.ClockWiseNeighbor;
            Sensor anti        = CurrentRN.AntiClockWiseNeighbor;

            if (newRingNode != null)
            {
                //me,anti,clock
                RingNodes newNo = new RingNodes(newRingNode, CurrentRN.AntiClockWiseNeighbor, CurrentRN.ClockWiseNeighbor);
                //newNo.AnchorNode = CurrentRN.AnchorNode;
                newRingNode.RingNodesRule = newNo;
                ReplaceTwoNodes(CurrentRN, newNo);
                ClearOldRingNodeData(CurrentRN, newNo);
                AddRemoveArrows(CurrentRN, newNo);
                markNeighboringRingNods();
                RingNodesFunctions r = new RingNodesFunctions();
                r.DeterminePositionofAllNodes();
                Console.WriteLine("Change {0} to {1}", CurrentRN.Node.ID, newRingNode.ID);
            }
            else
            {
                Console.WriteLine("Failed to change node {0}", CurrentRN.Node.ID);
                //Failed
            }
        }
示例#2
0
        public static void doLastCheck()
        {
            RingNodesFunctions r = new RingNodesFunctions();

            r.lastCheck();
            populateRingNodes();
            markNeighboringRingNods();
            r.DeterminePositionofAllNodes();
        }
示例#3
0
        private void startBuilding()
        {
            bool takeNextPoint = true;

            SubsetOfHull.Push(SortedSetOfConvexNodes.Dequeue());
            do
            {
                if (takeNextPoint)
                {
                    SubsetOfHull.Push(SortedSetOfConvexNodes.Dequeue());
                }

                ConvexHullNodes PointThree = SubsetOfHull.Pop();
                ConvexHullNodes PointTwo   = SubsetOfHull.Pop();
                ConvexHullNodes PointOne   = SubsetOfHull.Pop();



                if (isClockwise(PointOne, PointTwo, PointThree))
                {
                    SubsetOfHull.Push(PointOne);
                    SubsetOfHull.Push(PointTwo);
                    SubsetOfHull.Push(PointThree);
                    takeNextPoint = true;
                }
                else
                {
                    SubsetOfHull.Push(PointOne);
                    SubsetOfHull.Push(PointThree);
                    if (SubsetOfHull.Count >= 3)
                    {
                        takeNextPoint = false;
                    }
                }
            } while (SortedSetOfConvexNodes.Count > 0);

            // Console.WriteLine("Ending ****");
            int c = SubsetOfHull.Count;

            do
            {
                ConvexHullNodes x = SubsetOfHull.Pop();
                ConvexNodes.Add(x.node);
                //   x.node.ShowComunicationRange(true);
                //  Console.WriteLine(x.node.ID);
            } while (SubsetOfHull.Count > 0);

            RingNodesFunctions.doLastCheck();
        }
示例#4
0
        public void ChangeRingNode(RingNodes CurrentRN)
        {
            MainCounter++;
            //First we find a new node (Expand or Collapse we start with expand)
            //Change this node with the other and change the clockwise and anticlockwise
            //Determine poisition of nodes
            //Sensor oldRingNode = CurrentRN.Node;
            myNewRingNodes.Clear();
            Sensor newRingNode = FindNewRingNodeReplacement(CurrentRN);
            Sensor clock       = CurrentRN.ClockWiseNeighbor;
            Sensor anti        = CurrentRN.AntiClockWiseNeighbor;

            if (newRingNode != null)
            {
                if (PublicParamerters.IsExanding)
                {
                    double distance = Operations.DistanceBetweenTwoPoints(newRingNode.CenterLocation, PublicParamerters.networkCenter);
                    if (distance >= (PublicParamerters.clusterRadius * 1.6))
                    {
                        PublicParamerters.IsExanding = false;
                    }
                }
                else
                {
                    double distance = Operations.DistanceBetweenTwoPoints(newRingNode.CenterLocation, PublicParamerters.networkCenter);
                    if (distance <= (PublicParamerters.clusterRadius))
                    {
                        PublicParamerters.IsExanding = true;
                    }
                }
                //me,anti,clock
                //Now i have myNewRingNodes loop through there and fix everything
                RingNodes newNo = new RingNodes(newRingNode, CurrentRN.AntiClockWiseNeighbor, CurrentRN.ClockWiseNeighbor);
                myNewRingNodes.Add(newRingNode);
                CheckNewRingNode(newNo);
                ReplaceTwoNodes(CurrentRN, myNewRingNodes);
                foreach (Sensor newRN in myNewRingNodes)
                {
                    if (newRN.RingNodesRule.AntiClockWiseNeighbor.ID == newRN.RingNodesRule.ClockWiseNeighbor.ID)
                    {
                        Console.WriteLine("Error in Change RingNode");
                    }

                    newRN.RingNodesRule.AnchorNodes = CurrentRN.AnchorNodes;
                    newRingNode.IsHightierNode      = true;
                    newRingNode.SetSinksAgentsForNewHighTierNode(CurrentRN.Node.GetAnchorNodesFromHighTierNodes);
                }
                // RingNodes newNo = new RingNodes(newRingNode, CurrentRN.AntiClockWiseNeighbor, CurrentRN.ClockWiseNeighbor);
                // newNo.AnchorNode = CurrentRN.AnchorNode;
                // newRingNode.RingNodesRule = newNo;
                //   ReplaceTwoNodes(CurrentRN, newNo);
                if (!myNewRingNodes.Contains(CurrentRN.Node))
                {
                    ClearOldRingNodeData(CurrentRN);
                }

                //AddRemoveArrows(CurrentRN, newNo);
                RingNodesFunctions r = new RingNodesFunctions();
                //markNeighboringRingNods();
                UpdateInformation();
                r.DeterminePositionofAllNodes();
                // Console.WriteLine("Change {0} to {1}",CurrentRN.Node.ID,newRingNode.ID);
            }
            else
            {
                Console.WriteLine("Failed to change node {0}", CurrentRN.Node.ID);
                //Failed
            }
        }