mirror of
https://github.com/nunocoracao/blowfish.git
synced 2026-01-30 15:31:52 +00:00
config redirect
This commit is contained in:
+150
@@ -0,0 +1,150 @@
|
||||
// https://d3js.org/d3-polygon/ v3.0.1 Copyright 2010-2021 Mike Bostock
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
||||
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
||||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}));
|
||||
}(this, (function (exports) { 'use strict';
|
||||
|
||||
function area(polygon) {
|
||||
var i = -1,
|
||||
n = polygon.length,
|
||||
a,
|
||||
b = polygon[n - 1],
|
||||
area = 0;
|
||||
|
||||
while (++i < n) {
|
||||
a = b;
|
||||
b = polygon[i];
|
||||
area += a[1] * b[0] - a[0] * b[1];
|
||||
}
|
||||
|
||||
return area / 2;
|
||||
}
|
||||
|
||||
function centroid(polygon) {
|
||||
var i = -1,
|
||||
n = polygon.length,
|
||||
x = 0,
|
||||
y = 0,
|
||||
a,
|
||||
b = polygon[n - 1],
|
||||
c,
|
||||
k = 0;
|
||||
|
||||
while (++i < n) {
|
||||
a = b;
|
||||
b = polygon[i];
|
||||
k += c = a[0] * b[1] - b[0] * a[1];
|
||||
x += (a[0] + b[0]) * c;
|
||||
y += (a[1] + b[1]) * c;
|
||||
}
|
||||
|
||||
return k *= 3, [x / k, y / k];
|
||||
}
|
||||
|
||||
// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of
|
||||
// the 3D cross product in a quadrant I Cartesian coordinate system (+x is
|
||||
// right, +y is up). Returns a positive value if ABC is counter-clockwise,
|
||||
// negative if clockwise, and zero if the points are collinear.
|
||||
function cross(a, b, c) {
|
||||
return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
|
||||
}
|
||||
|
||||
function lexicographicOrder(a, b) {
|
||||
return a[0] - b[0] || a[1] - b[1];
|
||||
}
|
||||
|
||||
// Computes the upper convex hull per the monotone chain algorithm.
|
||||
// Assumes points.length >= 3, is sorted by x, unique in y.
|
||||
// Returns an array of indices into points in left-to-right order.
|
||||
function computeUpperHullIndexes(points) {
|
||||
const n = points.length,
|
||||
indexes = [0, 1];
|
||||
let size = 2, i;
|
||||
|
||||
for (i = 2; i < n; ++i) {
|
||||
while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;
|
||||
indexes[size++] = i;
|
||||
}
|
||||
|
||||
return indexes.slice(0, size); // remove popped points
|
||||
}
|
||||
|
||||
function hull(points) {
|
||||
if ((n = points.length) < 3) return null;
|
||||
|
||||
var i,
|
||||
n,
|
||||
sortedPoints = new Array(n),
|
||||
flippedPoints = new Array(n);
|
||||
|
||||
for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];
|
||||
sortedPoints.sort(lexicographicOrder);
|
||||
for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];
|
||||
|
||||
var upperIndexes = computeUpperHullIndexes(sortedPoints),
|
||||
lowerIndexes = computeUpperHullIndexes(flippedPoints);
|
||||
|
||||
// Construct the hull polygon, removing possible duplicate endpoints.
|
||||
var skipLeft = lowerIndexes[0] === upperIndexes[0],
|
||||
skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],
|
||||
hull = [];
|
||||
|
||||
// Add upper hull in right-to-l order.
|
||||
// Then add lower hull in left-to-right order.
|
||||
for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);
|
||||
for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);
|
||||
|
||||
return hull;
|
||||
}
|
||||
|
||||
function contains(polygon, point) {
|
||||
var n = polygon.length,
|
||||
p = polygon[n - 1],
|
||||
x = point[0], y = point[1],
|
||||
x0 = p[0], y0 = p[1],
|
||||
x1, y1,
|
||||
inside = false;
|
||||
|
||||
for (var i = 0; i < n; ++i) {
|
||||
p = polygon[i], x1 = p[0], y1 = p[1];
|
||||
if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;
|
||||
x0 = x1, y0 = y1;
|
||||
}
|
||||
|
||||
return inside;
|
||||
}
|
||||
|
||||
function length(polygon) {
|
||||
var i = -1,
|
||||
n = polygon.length,
|
||||
b = polygon[n - 1],
|
||||
xa,
|
||||
ya,
|
||||
xb = b[0],
|
||||
yb = b[1],
|
||||
perimeter = 0;
|
||||
|
||||
while (++i < n) {
|
||||
xa = xb;
|
||||
ya = yb;
|
||||
b = polygon[i];
|
||||
xb = b[0];
|
||||
yb = b[1];
|
||||
xa -= xb;
|
||||
ya -= yb;
|
||||
perimeter += Math.hypot(xa, ya);
|
||||
}
|
||||
|
||||
return perimeter;
|
||||
}
|
||||
|
||||
exports.polygonArea = area;
|
||||
exports.polygonCentroid = centroid;
|
||||
exports.polygonContains = contains;
|
||||
exports.polygonHull = hull;
|
||||
exports.polygonLength = length;
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
})));
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
// https://d3js.org/d3-polygon/ v3.0.1 Copyright 2010-2021 Mike Bostock
|
||||
!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((n="undefined"!=typeof globalThis?globalThis:n||self).d3=n.d3||{})}(this,(function(n){"use strict";function e(n,e){return n[0]-e[0]||n[1]-e[1]}function t(n){const e=n.length,t=[0,1];let o,r=2;for(o=2;o<e;++o){for(;r>1&&(f=n[t[r-2]],l=n[t[r-1]],u=n[o],(l[0]-f[0])*(u[1]-f[1])-(l[1]-f[1])*(u[0]-f[0])<=0);)--r;t[r++]=o}var f,l,u;return t.slice(0,r)}n.polygonArea=function(n){for(var e,t=-1,o=n.length,r=n[o-1],f=0;++t<o;)e=r,r=n[t],f+=e[1]*r[0]-e[0]*r[1];return f/2},n.polygonCentroid=function(n){for(var e,t,o=-1,r=n.length,f=0,l=0,u=n[r-1],i=0;++o<r;)e=u,u=n[o],i+=t=e[0]*u[1]-u[0]*e[1],f+=(e[0]+u[0])*t,l+=(e[1]+u[1])*t;return[f/(i*=3),l/i]},n.polygonContains=function(n,e){for(var t,o,r=n.length,f=n[r-1],l=e[0],u=e[1],i=f[0],g=f[1],h=!1,a=0;a<r;++a)t=(f=n[a])[0],(o=f[1])>u!=g>u&&l<(i-t)*(u-o)/(g-o)+t&&(h=!h),i=t,g=o;return h},n.polygonHull=function(n){if((r=n.length)<3)return null;var o,r,f=new Array(r),l=new Array(r);for(o=0;o<r;++o)f[o]=[+n[o][0],+n[o][1],o];for(f.sort(e),o=0;o<r;++o)l[o]=[f[o][0],-f[o][1]];var u=t(f),i=t(l),g=i[0]===u[0],h=i[i.length-1]===u[u.length-1],a=[];for(o=u.length-1;o>=0;--o)a.push(n[f[u[o]][2]]);for(o=+g;o<i.length-h;++o)a.push(n[f[i[o]][2]]);return a},n.polygonLength=function(n){for(var e,t,o=-1,r=n.length,f=n[r-1],l=f[0],u=f[1],i=0;++o<r;)e=l,t=u,e-=l=(f=n[o])[0],t-=u=f[1],i+=Math.hypot(e,t);return i},Object.defineProperty(n,"__esModule",{value:!0})}));
|
||||
Reference in New Issue
Block a user