public void GenerateGraph(NodeHolder nodeHolder, EdgeHolder edgeHolder) { foreach (var tuple in Topology.Neighbourhoods) { var node1 = nodeHolder.GetNodeById(tuple.Item1); var node2 = nodeHolder.GetNodeById(tuple.Item2); if (node1 == null) { node1 = Topology.States != null? NodeFactory.Create(AlgorithmType, tuple.Item1, new ConsoleNodeVisualizer(tuple.Item1, edgeHolder), false, nodeHolder, Topology.States[tuple.Item1]) : NodeFactory.Create(AlgorithmType, tuple.Item1, new ConsoleNodeVisualizer(tuple.Item1, edgeHolder), false, nodeHolder); nodeHolder.AddNode(node1); } if (node2 == null) { node2 = Topology.States != null? NodeFactory.Create(AlgorithmType, tuple.Item2, new ConsoleNodeVisualizer(tuple.Item2, edgeHolder), false, nodeHolder, Topology.States[tuple.Item2]) : NodeFactory.Create(AlgorithmType, tuple.Item2, new ConsoleNodeVisualizer(tuple.Item2, edgeHolder), false, nodeHolder); nodeHolder.AddNode(node2); } if (!node1.IsNeigbourOf(node2.Id)) { edgeHolder.AddEgde(new ConsoleEdge(node1, node2)); } } }
public override void Generate(int nodeCount, NodeHolder nodeHolder, EdgeHolder edgeHolder, AlgorithmType SelectedAlgorithm) { base.Generate(nodeCount, nodeHolder, edgeHolder, SelectedAlgorithm); for (int i = 0; i < nodeCount; i++) { if (i != nodeCount - 1) { var node1 = nodeHolder.GetNodeAt(i); var node2 = nodeHolder.GetNodeAt(i + 1); edgeHolder.AddEgde(new ConsoleEdge(node1, node2)); } } var randomizer = new Random(); foreach (var node1 in nodeHolder.GetCopyList()) { for (int i = 0; i < Grade; i++) { if (node1.Neighbours.Count >= Grade) { break; } var nextNodeId = randomizer.Next(0, nodeCount); while (nextNodeId == node1.Id || node1.IsNeigbourOf(nextNodeId)) { nextNodeId = randomizer.Next(0, nodeCount); } edgeHolder.AddEgde(new ConsoleEdge(node1, nodeHolder.GetNodeById(nextNodeId))); } //foreach (var node2 in nodeHolder.GetCopyList().Where(n => n != node1)) //{ // if (randomizer.Next() % 100 > 2) continue; // if (node1.IsNeigbourOf(node2.Id)) continue; // edgeHolder.AddEgde(new ConsoleEdge(node1, node2)); //} } }
public override void Generate(int nodeCount, NodeHolder nodeHolder, EdgeHolder edgeHolder, string SelectedAlgorithm) { var arg = new PaintEventArgs(Drawing_panel.CreateGraphics(), new Rectangle()); var radius = (Math.Min(Drawing_panel.Height, Drawing_panel.Width) - 80) / 2; var origin = new Point(Drawing_panel.Width / 2, Drawing_panel.Height / 2); var randomizer = new Random(); for (int i = 0; i < nodeCount; i++) { var angle = 360 / (float)nodeCount * i; var p = PointOnCircle(radius, angle, origin); if (!nodeHolder.AnyIntersecting(p)) { var node = NodeFactory.Create(SelectedAlgorithm, nodeHolder.NodeCount, new WinformsNodeVisualiser(arg, p.X, p.Y, nodeHolder.NodeCount, ParentForm), ParentForm.cb_selfStab.Checked, nodeHolder, randomizer.Next(0, 3)); nodeHolder.AddNode(node); } else { i--; } } ; //for (int i = 0; i < nodeCount; i++) //{ // var p = new Point(randomizer.Next(40, Drawing_panel.Width - 40), randomizer.Next(40, Drawing_panel.Height - 40)); // if (!nodeHolder.AnyIntersecting(p)) // { // var node = NodeFactory.Create(SelectedAlgorithm, nodeHolder.NodeCount, new WinformsNodeVisualiser(arg, p.X, p.Y, nodeHolder.NodeCount, ParentForm), ParentForm.cb_selfStab.Checked, nodeHolder); // nodeHolder.AddNode(node); // } // else // { // i--; // } //}; for (int i = 0; i < nodeCount; i++) { if (i != nodeCount - 1) { var node1 = nodeHolder.GetNodeAt(i); var node2 = nodeHolder.GetNodeAt(i + 1); edgeHolder.AddEgde(new WinformsEdge(arg, node1, node2)); } } foreach (var node1 in nodeHolder.GetCopyList()) { for (int i = 0; i < Grade; i++) { if (node1.Neighbours.Count >= Grade) { break; } var nextNodeId = randomizer.Next(0, nodeCount); while (nextNodeId == node1.Id || node1.IsNeigbourOf(nextNodeId)) { nextNodeId = randomizer.Next(0, nodeCount); } edgeHolder.AddEgde(new WinformsEdge(arg, node1, nodeHolder.GetNodeById(nextNodeId))); } //foreach (var node2 in nodeHolder.GetCopyList().Where(n => n != node1)) //{ // if (randomizer.Next() % 100 > 10) continue; // if (node1.Neighbours.ContainsKey(node2.Id)) continue; // edgeHolder.AddEgde(new WinformsEdge(arg, node1, node2)); //} } }