function showTree(tree) {
let width = 600;
let canvas = DOM.canvas(width, width);
let ctx = canvas.getContext("2d");
let mat2d = glmatrix.mat2d;
let transform = mat2d.fromScaling([], [width, width]);
mat2d.translate(transform, transform, [0.25, 0.25]);
mat2d.scale(transform, transform, [0.5, 0.5]);
let inverse = mat2d.invert([], transform);
let queryBall = new Ball(0, 0, radius);
let refresh = () => {
ctx.save();
ctx.clearRect(0, 0, width, width);
ctx.lineWidth = 1 / width;
ctx.strokeStyle = '#00000080';
ctx.fillStyle = '#00000000';
ctx.setTransform(...transform);
let result = tree.findInCircle(queryBall);
for (let node of tree.visited) node.entry.draw(ctx);
ctx.fillStyle = '#000000ff';
for (let ball of result) ball.draw(ctx);
ctx.strokeStyle = 'red';
ctx.fillStyle = '#ff000020';
ctx.lineWidth = 3 / width;
queryBall.draw(ctx);
ctx.restore();
ctx.fillText(`${tree.visited.length} nodes visited`, 10, 20);
ctx.fillText(`${result.length} leaf nodes found`, 10, 40);
};
canvas.onmousemove = canvas.click = e => {
let [x, y] = vec2.transformMat2d([], [e.offsetX, e.offsetY], inverse);
queryBall = new Ball(x, y, radius);
refresh();
};
refresh();
return canvas;
}