UNPKG

wcslight

Version:
175 lines 4.6 kB
/** * @author Fabrizio Giordano (Fab) */ // import vec3 from 'gl-matrix'; import { NumberType } from "./NumberType.js"; function Utils() { } export function cartesianToSpherical(xyz) { let dotXYZ = dot(xyz, xyz); let r = Math.sqrt(dotXYZ); let thetaRad = Math.acos(xyz[2] / r); let thetaDeg = radToDeg(thetaRad); // NB: in atan(y/x) is written with params switched atan2(x, y) let phiRad = Math.atan2(xyz[1], xyz[0]); let phiDeg = radToDeg(phiRad); if (phiDeg < 0) { phiDeg += 360; } return { phiDeg: phiDeg, thetaDeg: thetaDeg, phiRad: phiRad, thetaRad: thetaRad }; } ; export function sphericalToAstro(phiTheta) { let raDeg; let decDeg; raDeg = phiTheta.phiDeg; if (raDeg < 0) { raDeg += 360; } decDeg = 90 - phiTheta.thetaDeg; return { "raDeg": raDeg, "decDeg": decDeg, "raRad": degToRad(raDeg), "decRad": degToRad(decDeg) }; } export function astroToSpherical(raDec) { let phiDeg; let thetaDeg; phiDeg = raDec.raDeg; if (phiDeg < 0) { phiDeg += 360; } thetaDeg = 90 - raDec.decDeg; return { "phiDeg": phiDeg, "thetaDeg": thetaDeg, "phiRad": degToRad(phiDeg), "thetaRad": degToRad(thetaDeg), }; } export function sphericalToCartesian(phiTheta, r) { r = (r == undefined) ? 1 : r; var x = r * Math.sin(phiTheta.thetaRad) * Math.cos(phiTheta.phiRad); var y = r * Math.sin(phiTheta.thetaRad) * Math.sin(phiTheta.phiRad); var z = r * Math.cos(phiTheta.thetaRad); return { "x": x, "y": y, "z": z }; } ; export function fillAstro(ra, dec, unit) { if (unit == NumberType.DEGREES) { return { "raDeg": ra, "decDeg": dec, "raRad": degToRad(ra), "decRad": degToRad(dec) }; } else if (unit == NumberType.RADIANS) { return { "raRad": ra, "decRad": dec, "raDeg": radToDeg(ra), "decDeg": radToDeg(dec) }; } else { console.error("Wrong operation. NumberType " + unit + " not supported"); } } export function fillSpherical(phi, theta, unit) { if (unit == NumberType.DEGREES) { return { "phiDeg": phi, "thetaDeg": theta, "phiRad": degToRad(phi), "thetaRad": degToRad(theta) }; } else if (unit == NumberType.RADIANS) { return { "phiDeg": radToDeg(phi), "thetaDeg": radToDeg(theta), "phiRad": phi, "thetaRad": theta }; } else { console.error("Wrong operation. NumberType " + unit + " not supported"); } } function dot(a, b) { return a.x * b.x + a.y * b.y + a.z * b.z; } export function colorHex2RGB(hexColor) { // console.log(hexColor); var hex1 = hexColor.substring(1, 3); var hex2 = hexColor.substring(3, 5); var hex3 = hexColor.substring(5, 7); var dec1 = parseInt(hex1, 16); var dec2 = parseInt(hex2, 16); var dec3 = parseInt(hex3, 16); var rgb1 = (dec1 / 255).toFixed(2); var rgb2 = (dec2 / 255).toFixed(2); var rgb3 = (dec3 / 255).toFixed(2); return [parseFloat(rgb1), parseFloat(rgb2), parseFloat(rgb3)]; } export function degToRad(degrees) { return (degrees / 180) * Math.PI; } export function radToDeg(radians) { return radians * 180 / Math.PI; } export function raDegToHMS(raDeg) { var h = Math.floor(raDeg / 15); var m = Math.floor((raDeg / 15 - h) * 60); var s = (raDeg / 15 - h - m / 60) * 3600; return { h: h, m: m, s: s }; } export function decDegToDMS(decDeg) { var sign = 1; if (decDeg < 0) { sign = -1; } var decDeg_abs = Math.abs(decDeg); var d = Math.trunc(decDeg_abs); var m = Math.trunc((decDeg_abs - d) * 60); var s = (decDeg_abs - d - m / 60) * 3600; d = d * sign; return { d: d, m: m, s: s }; } function dms2DecDeg(decDMS) { var sign = Math.sign(decDMS.d); var deg = (decDMS.d) + sign * (decDMS.m / 60) + sign * (decDMS.s / 3600); return deg; } function hms2RaDeg(raHMS) { var sign = Math.sign(raHMS.h); var deg = (raHMS.h + sign * (raHMS.m / 60) + sign * (raHMS.s / 3600)) * 15; return deg; } function worldToModel(xy, radius) { var x = xy[0]; var y = xy[1]; var z = Math.sqrt(radius * radius - xy[0] * xy[0] - xy[1] * xy[1]); return [x, y, z]; } //# sourceMappingURL=Utils.js.map