/// <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; }
/// <summary> /// コンストラクタ /// </summary> /// <param name="To">向かうノード名</param> public Edge(Node To) { this.ToNode = To; }
/// <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 }; }
public void setNodeInfo(Node n) { NodeName = n.NodeName; LastAccessTime = n.LastAccessTime; X = n.Coordinate.X; Y = n.Coordinate.Y; }