|
var height = 500; |
|
var width = 900; |
|
|
|
var data = []; |
|
var grid_spacing = 100; |
|
var h = 75; //Cut off distance is the bandwidth for this type of kernel |
|
|
|
for(var i = 0; i < 50; i++){ |
|
data.push([Math.random()*width, Math.random()*height]); |
|
} |
|
|
|
var svg = d3.select("#chartArea") //Uniform Kernel |
|
.append("svg") |
|
.attr("width", width) |
|
.attr("height", height); |
|
|
|
svg.selectAll('circle') |
|
.data(data).enter() |
|
.append('circle') |
|
.attr('cx', function(d) { return d[0]; }) |
|
.attr('cy', function(d) { return d[1]; }) |
|
.attr('r', 5) |
|
|
|
for(var wi = 0; wi <= width; wi+=grid_spacing){ |
|
svg.append('line') |
|
.style('stroke', 'black') |
|
.attr('x1', wi) |
|
.attr('x2', wi) |
|
.attr('y1', 0) |
|
.attr('y2', height) |
|
} |
|
for(var hi = 0; hi <= height; hi+=grid_spacing){ |
|
svg.append('line') |
|
.style('stroke', 'black') |
|
.attr('x1', 0) |
|
.attr('x2', width) |
|
.attr('y1', hi) |
|
.attr('y2', hi) |
|
} |
|
|
|
for(var x_i = 0; x_i <= width; x_i += grid_spacing){ |
|
for(var y_i = 0; y_i <= height; y_i += grid_spacing){ |
|
var summation = 0; |
|
for(var i = 0; i < data.length; i++){ |
|
//Calculate Eulicidean distance |
|
distance = Math.sqrt(Math.pow((x_i - data[i][0]),2) + Math.pow((y_i - data[i][1]),2)) |
|
if(distance < h) |
|
summation++ |
|
} |
|
//Shows the extent of the h |
|
svg.append('circle') |
|
.classed('h', true) |
|
.style('fill', 'none') |
|
.style('stroke', 'none') |
|
.attr('cx', x_i) |
|
.attr('cy', y_i) |
|
.attr('r', h) |
|
|
|
var lambda = 1/(Math.PI*h^2) * summation; |
|
if(lambda > 0){ |
|
svg.append('circle') |
|
.style('fill', 'none') |
|
.style('stroke', 'maroon') |
|
.attr('cx', x_i) |
|
.attr('cy', y_i) |
|
.attr('r', lambda*1000) |
|
} |
|
} |
|
} |
|
|
|
d3.select("#show-h") |
|
.property("disabled", false) |
|
.on("change", function() { |
|
var currentColour = d3.selectAll('.h').style('stroke'); |
|
var nextColour = currentColour === 'rgb(28, 255, 152)' ? 'none' : 'rgb(28, 255, 152)'; |
|
d3.selectAll('.h').style('stroke', nextColour); |
|
}); |
|
|