cartesian.js 929 B

123456789101112131415161718192021222324252627282930313233
  1. import {asin, atan2, cos, sin, sqrt} from "./math";
  2. export function spherical(cartesian) {
  3. return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];
  4. }
  5. export function cartesian(spherical) {
  6. var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);
  7. return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];
  8. }
  9. export function cartesianDot(a, b) {
  10. return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
  11. }
  12. export function cartesianCross(a, b) {
  13. 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]];
  14. }
  15. // TODO return a
  16. export function cartesianAddInPlace(a, b) {
  17. a[0] += b[0], a[1] += b[1], a[2] += b[2];
  18. }
  19. export function cartesianScale(vector, k) {
  20. return [vector[0] * k, vector[1] * k, vector[2] * k];
  21. }
  22. // TODO return d
  23. export function cartesianNormalizeInPlace(d) {
  24. var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
  25. d[0] /= l, d[1] /= l, d[2] /= l;
  26. }