d3-geo-voronoi
Version:
Spherical Voronoi Diagram and Delaunay Triangulation
49 lines (39 loc) • 1.2 kB
JavaScript
import { asin, atan2, cos, sin, sqrt } from "./math.js";
export function spherical(cartesian) {
return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];
}
export function cartesian(spherical) {
const lambda = spherical[0],
phi = spherical[1],
cosPhi = cos(phi);
return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];
}
export function cartesianDot(a, b) {
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
}
export function cartesianCross(a, b) {
return [
a[1] * b[2] - a[2] * b[1],
a[2] * b[0] - a[0] * b[2],
a[0] * b[1] - a[1] * b[0],
];
}
// TODO return a
export function cartesianAddInPlace(a, b) {
(a[0] += b[0]), (a[1] += b[1]), (a[2] += b[2]);
}
export function cartesianAdd(a, b) {
return [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
}
export function cartesianScale(vector, k) {
return [vector[0] * k, vector[1] * k, vector[2] * k];
}
// TODO return d
export function cartesianNormalizeInPlace(d) {
var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
(d[0] /= l), (d[1] /= l), (d[2] /= l);
}
export function cartesianNormalize(d) {
var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
return [d[0] / l, d[1] / l, d[2] / l];
}