Skip to content

Instantly share code, notes, and snippets.

@cohnt
Last active February 12, 2018 17:29
Show Gist options
  • Save cohnt/79c15725a5ee3e7cfb56220914eb2a7d to your computer and use it in GitHub Desktop.
Save cohnt/79c15725a5ee3e7cfb56220914eb2a7d to your computer and use it in GitHub Desktop.
function dist(x, y) {
return Math.sqrt(Math.pow(y[0]-x[0], 2)+Math.pow(y[1]-x[1], 2));
}
function ln(x) {
return Math.log(x);
}
function abs(x) {
return Math.abs(x);
}
function disth(p, q) {
if(p[0] == q[0]) {
var za = [p[0], 0];
return abs(ln(dist(za, q)/dist(za, p)));
}
else {
var c = [0, 0];
if(q[1] != p[1]) {
c[0] = ((0-((p[1]+q[1])/2)) / ((p[0]-q[0])/(q[1]-p[1]))) + ((p[0]+q[0])/2);
}
else {
c[0] = (p[0]+q[0])/2;
}
var r = dist(c, p);
var zL = [c[0]-r, 0];
var zR = [c[0]+r, 0];
return abs(ln((dist(zL, q)*dist(p,zR))/(dist(zL, p)*dist(q,zR))));
}
}
function distGrid(c, size, res) {
var grid = [];
for(var i=-size/2; i<=size/2; i += res) {
grid.unshift([]);
for(var j=-size/2; j<=size/2; j += res) {
var point = [c[0]+j, c[1]+i];
if(point[1] <= 0) {
grid[0].push(-1);
}
else {
grid[0].push(disth(c, point));
}
}
}
return grid;
}
function radGrid(c, r, size, res) {
var grid = distGrid(c, size, res);
for(var i=0; i<grid.length; ++i) {
for(var j=0; j<grid[i].length; ++j) {
if(grid[i][j] != -1) {
grid[i][j] = abs(grid[i][j]-r);
}
}
}
return grid;
}
function prettyPrintRadGrid(c, r, size, res, thresh) {
var grid = radGrid(c, r, size, res);
var wholeMsg = "";
for(var i=0; i<grid.length; ++i) {
var lineMsg = "";
for(var j=0; j<grid.length; ++j) {
var msg = String(grid[i][j]).slice(0, 5);
while(msg.length <= 5) {
msg = " " + msg;
}
if(grid[i][j] < thresh && grid[i][j] != -1) {
msg = "\u2588\u2588\u2588\u2588\u2588";
}
msg = msg + ",";
lineMsg += msg;
}
wholeMsg += lineMsg.slice(0, lineMsg.length-1);
wholeMsg += "\n";
}
console.log(wholeMsg);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment