Compute boundingBox

by microbians

HTML

<html>
<body>

</body>
</html>

CSS

body {
  background:white;
  color:black;
  font-family:sans-serif;
}

JavaScript

// Array shit
minOfArray = function() {
  return this.reduce((m, p) => p < m ? p : m, this[0]);
}
maxOfArray = function() {
  return this.reduce((m, p) => p > m ? p : m, this[0]);
}


// Randmo shit
Math._random = Math.random;
Math.random = function(min, max) {
	if (max == undefined) { return Math._random()*min; }
	return Math._random() * (max - min) + min;
}
random=Math.random;

Math.randomInt = function(min, max) {
    if (max == undefined) {
		max = Math.floor(min);
		min = 0;
	} else {
		min = Math.ceil(min);
		max = Math.floor(max);
	}
    return Math.floor(Math._random() * (max - min + 1)) + min;
}
randomInt=Math.randomInt;

// TRY BIGGER NUMBERS!!
num=50000;

document.body.innerHTML+="<h2>Computing "+num+" boundingBoxes</h2>"

// THE THING
elements=[];
var txt ='<textarea style="width:500px; height:300px;">';
for (i=0; i<num; i++) {
	elements.push( { 	x1:Math.randomInt(0,1000000), y1:Math.randomInt(0,10000000),	x2:Math.randomInt(0,10000000),	y2:Math.randomInt(0,10000000)});
	if (i<10) txt+=i+": {x1:"+ elements[i].x1 + ", y1:"+ elements[i].y1 + ", x2:"+ elements[i].x2 + ", y2:"+ elements[i].y2 + "}&#13;&#10;";
}
txt+="[ ... ] and "+ (num-20) +" more&#13;&#10;";

for (i=num-10; i<num; i++) {
txt+=i+": {x1:"+ elements[i].x1 + ", y1:"+ elements[i].y1 + ", x2:"+ elements[i].x2 + ", y2:"+ elements[i].y2 + "}&#13;&#10;";
}
txt+="</textarea><br/>";

var d = new Date();
var n1 = d.getTime();

console.log(n1)
boundingBox = {
			x1:minOfArray.call(Array.prototype.slice.call(elements.map(e => e.x1))),
			y1:minOfArray.call(Array.prototype.slice.call(elements.map(e => e.y1))),
			x2:maxOfArray.call(Array.prototype.slice.call(elements.map(e => e.x2))),
			y2:maxOfArray.call(Array.prototype.slice.call(elements.map(e => e.y2))),
}

var d = new Date();
var n2 = d.getTime();

document.body.innerHTML+="<strong>Resulting boundingBox → {x1:"+ boundingBox.x1 + ", y1:"+ boundingBox.y1 + ", x2:"+ boundingBox.x2 + ", y2:"+ boundingBox.y2 +...