xxxxxxxxxx
116
let nodes = []
let connections = []
let nodeId = 0;
let visited = {}
function setup() {
createCanvas(800, 800);
addNode( {x: 100, y: 100}, 'Entree')
addNode({x: 500, y: 250}, 'Kassa' )
}
function getDistSq(a, b) {
const x2 = abs(b.x - a.x) * abs(b.x - a.x)
const y2 = abs(b.y - a.y) * abs(b.y - a.y)
return (x2 + y2).toFixed(2)
}
function getDist(a, b) {
return sqrt(getDistSq(a, b)).toFixed(2)
}
function mousePressed() {
addNode( {x:mouseX, y:mouseY})
for (var member in visited) delete visited[member];
console.log(visited)
recalculate(0)
console.log(visited)
}
function addNode(pos, name = 'Test') {
const newNode = {
id: nodeId,
name: name,
x: pos.x, y: pos.y,
child: -1
}
nodeId++
nodes.push( newNode )
}
function recalculate (nodeId) {
if (nodeId > nodes.length -1) return
if (nodeId < 0) return
if (visited[nodeId]) return
visited[nodeId] = true
let nearest = -1
let closestDist = Infinity
nodes.map(node => {
if (node.id !== nodeId) {
const dist = getDistSq(
{ x: nodes[nodeId].x, y: nodes[nodeId].y },
{ x: node.x, y: node.y }
)
if (dist < closestDist) {
nearest = node.id
closestDist = dist
}
}
})
if (nearest >= 0) {
nodes[nodeId].child = nearest;
recalculate(nearest, nodeId)
console.log('Nearest: ', nearest)
}
}
function draw() {
background(22);
noStroke()
nodes.map(node => {
noStroke()
fill(255)
ellipse(node.x, node.y, 10, 10)
fill(200, 12, 12)
textSize(14)
text(node.id, node.x + 10, node.y)
// Draw connection
if (node.child >= 0) {
stroke(120)
line(
node.x,
node.y,
nodes[node.child].x,
nodes[node.child].y
)
}
})
}