Пример #1
0
        /// <summary>
        /// 読み込む
        /// </summary>
        /// <param name="Path">ローカルパス</param>
        /// <returns></returns>
        public NodeNetwork readData(string Path)
        {
            //XmlSerializerオブジェクトを作成
            XmlSerializer serializer = new XmlSerializer(typeof(ArrayList), nl);
            //読み込むファイルを開く
            FileStream fs = new FileStream(Path + @"\Graph.xml", System.IO.FileMode.Open);
            //XMLファイルから読み込み、逆シリアル化する
            var obj = (ArrayList)serializer.Deserialize(fs);
            //ファイルを閉じる
            fs.Close();

            //XmlSerializerオブジェクトを作成
            serializer = new XmlSerializer(typeof(ArrayList), il);
            //読み込むファイルを開く
            fs = new FileStream(Path + @"\Table.xml", System.IO.FileMode.Open);
            //XMLファイルから読み込み、逆シリアル化する
            var obj2 = (ArrayList)serializer.Deserialize(fs);
            //ファイルを閉じる
            fs.Close();

            /*読み込んだらコンバート*/
            foreach (TableItem t in obj2)
            {
                SampleNodeNet.TableItems.Add(t);
            }

            Random R = new Random();
            int cnt = R.Next();
            foreach (NodeInfo n in obj)
            {
                Node nn = new Node(n.NodeName, 1.0d, n.X, n.Y,++cnt);
                nn.LastAccessTime = n.LastAccessTime;
                SampleNodeNet.Nodes.Add(n.NodeName, nn);
            }

            foreach (NodeInfo n in obj)
            {
                foreach (string e in n.ToNode)
                {
                    SampleNodeNet.Nodes[n.NodeName].ToEdge.Add(new Edge(SampleNodeNet.Nodes[e]));
                    SampleNodeNet.Nodes[n.NodeName].LinkNode.Add(SampleNodeNet.Nodes[e]);
                    SampleNodeNet.Nodes[e].LinkNode.Add(SampleNodeNet.Nodes[n.NodeName]);
                }
            }
            return SampleNodeNet;
        }
Пример #2
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="To">向かうノード名</param>
 public Edge(Node To)
 {
     this.ToNode = To;
 }
Пример #3
0
        /// <summary>
        /// ばねによってかかる力の大きさを求める(フックの法則)
        /// </summary>
        /// <param name="n">繋がっているノード</param>
        /// <returns>そのノードのx方向とy方向にかかる力の大きさ</returns>
        public Pair GetSpringForce(Node n)
        {
            double dx = this.Coordinate.X - n.Coordinate.X;
            double dy = this.Coordinate.Y - n.Coordinate.Y;
            double d2 = dx * dx + dy * dy;

            if (d2 < double.Epsilon)
            {
                Random Rand = new Random();
                return new Pair()
                {
                    X = Rand.NextDouble() - 0.99d,
                    Y = Rand.NextDouble() - 0.99d
                };
            }

            double d = Math.Sqrt(d2);
            double cos = dx / d;
            double sin = dy / d;
            double dl = d - L;

            return new Pair()
            {
                X = -K * dl * cos,
                Y = -K * dl * sin
            };
        }
Пример #4
0
 public void setNodeInfo(Node n)
 {
     NodeName = n.NodeName;
     LastAccessTime = n.LastAccessTime;
     X = n.Coordinate.X;
     Y = n.Coordinate.Y;
 }