2017-04-04 01:24:46 +02:00
/ *
=== === === === === === === === === === === === === === === === === === === === === === === ===
2022-04-09 04:45:47 +02:00
The 2022 / r / place Atlas
An Atlas of Reddit ' s 2022 / r / place , with information to each
2017-04-04 01:24:46 +02:00
artwork of the canvas provided by the community .
2022-04-09 04:45:47 +02:00
Copyright ( c ) 2017 Roland Rytz < roland @ draemm . li >
2022-04-23 15:30:48 +02:00
Copyright ( c ) 2022 Place Atlas contributors
2022-04-09 04:45:47 +02:00
2017-04-04 01:24:46 +02:00
Licensed under the GNU Affero General Public License Version 3
2022-04-09 03:23:55 +02:00
https : //place-atlas.stefanocoding.me/license.txt
2017-04-04 01:24:46 +02:00
=== === === === === === === === === === === === === === === === === === === === === === === ===
* /
2022-04-03 11:08:52 +02:00
window . addEventListener ( "error" , function ( e ) {
2022-04-16 15:21:42 +02:00
console . error ( e ) ;
2022-04-16 14:44:50 +02:00
let errorMessage = "<p class=\"error\">An error has occurred:</p>" ;
2022-04-03 11:08:52 +02:00
errorMessage += "<p class=\"errorBody\">" + e . message + "</p>" ;
errorMessage += "<p class=\"errorBody\">on line " + e . lineno + "</p>" ;
2022-04-09 06:57:21 +02:00
errorMessage += "<p class=\"error\">If this keeps happening, feel free to tell us on <a href=\"https://discord.gg/pJkm23b2nA\">our Discord server</a>.</p>" ;
2017-04-10 17:57:13 +02:00
document . getElementById ( "loadingContent" ) . innerHTML = errorMessage ;
} ) ;
2022-04-16 14:44:50 +02:00
function getPositionOfEntry ( entry ) {
2022-04-06 15:29:40 +02:00
let startX = 2000 , startY = 2000 ;
2022-04-16 14:44:50 +02:00
for ( const [ x , y ] of entry . path ) {
2022-04-06 15:29:40 +02:00
startX = Math . min ( x , startX ) ;
startY = Math . min ( y , startY )
2017-04-10 14:40:01 +02:00
}
2022-04-16 14:44:50 +02:00
if ( startX === 2000 || startY === 2000 ) return null ;
2022-04-06 15:29:40 +02:00
return [ parseInt ( startX ) , parseInt ( startY ) ] ;
2017-04-10 14:40:01 +02:00
}
2022-04-06 21:31:21 +02:00
const areaMap = new Map ( ) ;
2017-04-04 01:24:46 +02:00
2022-04-06 15:29:40 +02:00
// Modified from https://stackoverflow.com/a/33670691
function calcPolygonArea ( vertices ) {
2022-04-16 14:44:50 +02:00
const hit = areaMap . get ( vertices ) ;
2022-04-06 21:31:21 +02:00
if ( hit != null ) {
return hit ;
}
2022-04-16 14:44:50 +02:00
let total = 0 ;
2017-04-04 01:24:46 +02:00
2022-04-16 14:44:50 +02:00
for ( let i = 0 , l = vertices . length ; i < l ; i ++ ) {
const addX = vertices [ i ] [ 0 ] ;
const addY = vertices [ i == vertices . length - 1 ? 0 : i + 1 ] [ 1 ] ;
const subX = vertices [ i == vertices . length - 1 ? 0 : i + 1 ] [ 0 ] ;
const subY = vertices [ i ] [ 1 ] ;
2017-04-04 01:24:46 +02:00
2022-04-16 14:44:50 +02:00
total += ( addX * addY * 0.5 ) ;
total -= ( subX * subY * 0.5 ) ;
}
2017-04-04 01:24:46 +02:00
2022-04-16 14:44:50 +02:00
const area = Math . floor ( Math . abs ( total ) ) ;
2022-04-06 21:31:21 +02:00
areaMap . set ( vertices , area ) ;
2022-04-16 14:44:50 +02:00
return area ;
2022-04-06 15:29:40 +02:00
}