xxxxxxxxxx
192
let table;
function preload() {
table = loadTable("data/dist.csv","tsv");
}
let knopen = [];
let edges = [];
let lastkey;
// Tijdelijk. Wordt vervangen door het inlezen
// van het netwerk.
let posities = [
[0, 0],
[1, 1],
[2, 2],
[3, 4],
[4, 5],
[5, 3]
]
connections = [
[0, 1, 2],
[0, 2, 1],
[1, 2, 2],
[2, 3, 4],
[2, 4, 2],
[1, 5, 3],
[3, 4, 5],
[2, 5, 1]
]
function readTable() {
let xdist = width/4;
let ydist = height/4;
let cols = table.getColumnCount();
let rows = table.getRowCount();
for (let r=1;r<rows;r++) {
let item = table.getString(r,0).split(".");
let k = new knoop(r-1,item[0],item[1]);
knopen[k.id] = k;
k.positie = r-1;
k.x = xdist/2+((r-1)%4)*xdist;
k.y = ydist/2+floor((r-1)/4)*ydist;
}
let ided = 0;
for (let r=1;r<rows-1;r++) {
for (let c=r+1;c<cols;c++) {
let id1 = r-1;
let id2 = c-1;
let nr = int(table.getString(r,c));
let e = new edge(ided, nr, id1, id2);
ided++;
edges[e.id] = e;
}
}
}
function readData() {
for (let i = 0; i < posities.length; i++) {
let p = posities[i];
let k = new knoop(p[0],"","");
k.positie = p[1];
k.x = 100 + 200 * (p[1] % 2);
k.y = 100 + (100 * (int(p[1] / 2)));
knopen[k.id] = k;
}
connections.forEach((v, ind) => {
let id1 = v[0];
let id2 = v[1];
if (id2 < id1) {
let tmp = id1;
id1 = id2;
id2 = tmp;
}
let e = new edge(ind, v[2], id1, id2);
edges[ind] = e;
});
}
function setup() {
createCanvas(600, 600);
//fullscreen();
background(0)
strokeWeight(2);
textSize(16);
// noLoop();
frameRate(3);
readTable();
// knopen = [];
// edges = [];
// readData();
makespanningtree();
parenting();
detlayers();
detbreedte();
lastkey = 2;
drawboominit();
// drawtree();
// drawboom();
}
function draw() {
background(0)
strokeWeight(2);
textSize(16);
if (lastkey=="2") {
drawboom();
}
if (lastkey=="1") {
drawtree();
}
noLoop();
}
function drawtreeinit() {
for (let i = 0; i < knopen.length; i++) {
let k = knopen[i];
k.x = 100 + 200 * (k.positie % 2);
k.y = 100 + (100 * (k.positie / 2));
}
}
function drawtree() {
clear()
background(0);
textAlign(CENTER, CENTER);
for (let i = 0; i < knopen.length; i++) {
let k = knopen[i];
let x = k.x;
let y = k.y;
stroke(255);
fill(255);
circle(x, y, 40);
stroke(0);
noFill();
text(k.id, x, y);
}
for (let i = 0; i < edges.length; i++) {
let e = edges[i];
let k1 = knopen[e.id1];
let k2 = knopen[e.id2];
let p1 = createVector(k1.x, k1.y);
let p2 = createVector(k2.x, k2.y);
let pd = p5.Vector.sub(p2, p1).setMag(20);
let pb = p1.add(pd);
let pe = p2.sub(pd);
if (e.sp == sp_yes) stroke(255, 0, 0)
else stroke(255);
strokeWeight(2);
line(pb.x, pb.y, pe.x, pe.y);
let ph = p5.Vector.add(pe, pb).mult(0.5);
fill(0);
stroke(0);
circle(ph.x, ph.y, 20);
fill(255);
stroke(255);
strokeWeight(1);
text(e.cost, ph.x, ph.y);
}
}
function mouseDragged() {
let x = mouseX;
let y = mouseY;
for (let i=0;i<knopen.length;i++) {
let k = knopen[i];
if (x>(k.x-20) && x<(k.x+20) &&
y>(k.y-20) && y<(k.y+20)) {
k.x = x;
k.y = y;
}
}
return false;
}
function keyTyped() {
lastkey = key;
if (lastkey==1) drawtreeinit();
if (lastkey==2) drawboominit();
}