xxxxxxxxxx
class Node{
constructor(x, y) {
this.x = x;
this.y = y;
this.via = undefined;
this.distance = -1;
this.connections = {};
}
parseConnections() {
console.log(this.connections);
var keys = Object.keys(this.connections);
for (var i in keys) { //Pour chaque noeud connecté
var dest = keys[i];
if (nodes[dest].distance != -1) { //Si il est calculé
if (this.distance = -1 || (this.connections[dest] + nodes[dest].distance < this.distance)) { //Si la nouvelle distance est plus faible ou si le noeud n'est pas calculé
this.distance = nodes[dest].distance + this.connections[dest];
this.via = dest;
}
}//Si le noeud dest est calculé
} //Noeuds connectés
} //parseConnections
}
var nodeRadius = 10;
var selected = -1;
var width = 4;
var height = 4;
var nodes = [];
var n = 1;
function setup() {
createCanvas(windowWidth, windowHeight);
center = createVector(windowWidth/2, windowHeight/2, 0);
}
function mousePressed() {
selected = -1;
for (var i = 0; i < nodes.length; i++) {
if (distance(mouseX, mouseY, nodes[i].x, nodes[i].y) < nodeRadius) {
selected = i;
break;
}
}
if (selected == -1) {
ellipse(mouseX, mouseY, 20, 20);
nodes.push(new Node(mouseX, mouseY));
}
}
function mouseReleased() {
for (i = 0; i < nodes.length; i++) {
if (distance(mouseX, mouseY, nodes[i].x, nodes[i].y) < nodeRadius) {
if (selected != -1) {
nodes[selected].connections[i] = true;
nodes[i].connections[selected] = true;
}
}
}
selected = -1;
}
function draw() {
background(100);
for (var i = 0; i < nodes.length; i++){ //Pour chaque noeud
ellipse(nodes[i].x, nodes[i].y, nodeRadius*2, nodeRadius*2);
text(str(i), nodes[i].x - nodeRadius/2, nodes[i].y + nodeRadius/2);
var keys = Object.keys(nodes[i].connections)
for (k in keys) {
var key = keys[k];
line(nodes[i].x, nodes[i].y, nodes[key].x, nodes[key].y)
}
}
if (selected != -1) {
line(nodes[selected].x, nodes[selected].y, mouseX, mouseY);
}
text(str(n), 100 , 100);
}
function distance(x1, y1, x2, y2) {
x = abs(x1-x2);
y = abs(y1-y2);
return sqrt(sq(x)+sq(y));
}
function keyPressed() {
if (int(key) > 0 && int(key) < 10) {
n = int(key);
} else if (keyCode == 13){
var loop = true;
while (loop) { //Jusqu'à ce que tous les noeuds soient calculés
loop = false;
for (i = 0; i < nodes.length; i++) {
nodes[i].parseConnections();
if (nodes[i].distance == -1) {
loop = true;
}
}
}
var i = nodes.length - 1;
print("i: " + str(i))
print("l : " + str(nodes.length))
output = str(nodes[i].via);
print("i:" + str(i))
while (i != 0) {
i = nodes[i].via;
output = str(nodes[i].via) + " -> " + output;
}
print(output);
}
}