-
Notifications
You must be signed in to change notification settings - Fork 0
/
RandomNodes.java
142 lines (121 loc) · 3.9 KB
/
RandomNodes.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.EventHandler;
import java.awt.MouseInfo;
import java.awt.PointerInfo;
import java.awt.geom.Point2D;
import java.awt.Point;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Shape;
import javafx.scene.shape.Line;
import java.util.EventObject;
import javafx.event.Event;
import javafx.event.ActionEvent;
import java.util.Random;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.layout.Region;
import javafx.scene.control.Control;
import javafx.scene.control.ComboBoxBase;
import javafx.scene.control.ColorPicker;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import java.lang.Object;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.layout.Region;
import javafx.scene.layout.Pane;
import javafx.scene.layout.GridPane;
import javafx.scene.control.Control;
import javafx.scene.control.ChoiceBox;
import java.lang.Object;
import javafx.stage.Window;
import javafx.stage.PopupWindow;
import javafx.scene.control.PopupControl;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
// Elliot's Random Graph class
public class RandomNodes {
private int vertices;
private int edges;
private int randomX = 0;
private int randomY = 0;
private int[][] array; //The AdjArray!
public RandomNodes() {
Random random = new Random();
vertices = random.nextInt(20) + 1;
edges = random.nextInt(40) + 1;
}
public RandomNodes(int userVertex, int userEdge) {
vertices = userVertex;
edges = userEdge;
}
public void createAdjMatrix() {
int[][] adjMatrix = new int[vertices][vertices];
int counter = 0;
while (counter < edges) {
randomNum();
if (adjMatrix[randomX][randomY] != 1 ) { // currently takes 0 also
adjMatrix[randomX][randomY] = 1;
adjMatrix[randomY][randomX] = 1;
counter++;
System.out.println(randomX + " is connected to " + randomY + "this is edge number " + counter);
}
}
array = adjMatrix;
createVertexArray();
lineDrawing();
}
public void createVertexArray() { //Initializes the vertexArray (Only had to happen once!!)
VertexArray temp = new VertexArray(vertices);
}
/*
This is the stuff Roy wrote, I added it to this class.
When you run the constructor it uses the constructed adjMatrix to make this (called array!!!)
VertexArray.vertexArray. is where the vertices are stored, the static vertexArray in VertexArray
*/
public void lineDrawing() {
int[][] copyMatrix = new int[array.length][array[0].length];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
copyMatrix[i][j] = array[i][j];
}
}
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
if (copyMatrix[i][j] == 1) {
copyMatrix[j][i] = 0;
Line line = lineConnect.connect(VertexArray.vertexArray[i], VertexArray.vertexArray[j]);
Testing.root.getChildren().addAll(line);
/* Roy's code used to try and make multiple line objects,
by just adding them to the pane called Testing.root we can constantly
only need 1 Line object at a time
*/
}
}
}
}
/*NEEDS IMPROVEMENT!!!!!!!!!!!!!
This was just for my conveinience, used in the constructor
this should be refined to not check things double!!!, compile time
with a lot of edges is very very long */
public void randomNum() {
Random rand = new Random();
randomX = 0;
randomY = 0;
while (randomX == randomY)
randomX = rand.nextInt(vertices);
randomY = rand.nextInt(vertices);
}
//Is used in the Testing class but can be removed if we make array public static
//Leave for now tho
public int[][] getAdjMatrix() {
return array;
}
}