var radiusSearchInit = function(t, params) { t.result = []; var [radius] = params; t.x0 = t.x - radius, t.y0 = t.y - radius; t.x3 = t.x + radius, t.y3 = t.y + radius; t.radius = radius * radius; } var radiusSearchVisit = function(t, d2) { t.node.data.scanned = true; if (d2 < t.radius) { do {t.result.push(t.node.data); t.node.data.selected = true;} while (t.node = t.node.next); } } var radiusSearch = {init: radiusSearchInit, visit:radiusSearchVisit} var findInit = function(t, params) { var [radius] = params; if (radius == null || params.length === 0) { t.radius = Infinity; } else { t.x0 = t.x - radius, t.y0 = t.y - radius; t.x3 = t.x + radius, t.y3 = t.y + radius; t.radius = radius * radius; } } var findVisit = function(t, d2) { t.node.data.scanned = true; if (d2 < t.radius) { var d = Math.sqrt(t.radius = d2); t.x0 = t.x - d, t.y0 = t.y - d; t.x3 = t.x + d, t.y3 = t.y + d; t.result = t.node.data; } } var findSearch = {init:findInit, visit:findVisit}