/* ======================================================================== The /r/place Atlas An Atlas of Reddit's /r/place, with information to each artwork of the canvas provided by the community. Copyright (C) 2017 Roland Rytz Licensed under the GNU Affero General Public License Version 3 This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For more information, see: https://place-atlas.stefanocoding.me/license.txt ======================================================================== */ window.addEventListener("error", function (e) { console.log(e); var errorMessage = "

An error has occurred:

"; errorMessage += "

" + e.message + "

"; errorMessage += "

on line " + e.lineno + "

"; errorMessage += "

If this keeps happening, feel free to send me a mail.

"; document.getElementById("loadingContent").innerHTML = errorMessage; }); function getPositionOfEntry(entry){ let startX = 2000, startY = 2000; for(let [x, y] of entry.path){ startX = Math.min(x, startX); startY = Math.min(y, startY) } if(startX === 2000 || startY === 2000) return null; return [parseInt(startX), parseInt(startY)]; } const areaMap = new Map(); // Modified from https://stackoverflow.com/a/33670691 function calcPolygonArea(vertices) { var hit = areaMap.get(vertices); if (hit != null) { return hit; } var total = 0; for (var i = 0, l = vertices.length; i < l; i++) { var addX = vertices[i][0]; var addY = vertices[i == vertices.length - 1 ? 0 : i + 1][1]; var subX = vertices[i == vertices.length - 1 ? 0 : i + 1][0]; var subY = vertices[i][1]; total += (addX * addY * 0.5); total -= (subX * subY * 0.5); } var area = Math.floor(Math.abs(total)); areaMap.set(vertices, area); return area; }