/** This is a test of altitude-azimuth to XYZ Cartesian coordinate conversions both forwared and backward. */ // Define and test conversions between cartesian (x, y, z) and // alt-azimuth (radius, altitude, azimuth) coordinates. // Altitude is the angle up from the horizon. // Azimuth is the angle clockiwse from north with north being 0 degrees and // east being 90 degrees (like standard compass bearing.s) // The x axis is positive toward east. // The y axis is positive toward north. // z is up. altAzToXYZ[r, alt, az] := { x = r * cos[alt] sin[az] y = r * cos[alt] cos[az] z = r * sin[alt] return [x,y,z] } xyzToAltAz[x, y, z] := { r = sqrt[x^2 + y^2 + z^2] if r != 0 deg alt = arcsin[z / r] else alt = 0 deg az = arctan[x, y] return [r, alt, az] } test[x, y, z, err=1e-14] := { [r, alt, az] = xyzToAltAz[x, y, z] [xp, yp, zp] = altAzToXYZ[r, alt, az] dx = x-xp dy = y-yp dz = z-zp if abs[dx] > err or abs[dy] > err or abs[dz] > err println["$x $y $z : $dx $dy $dz : $r " + (alt->deg) + " " + (az->deg)] } p = new range[-2, 2, 1/2] //p = [-1, 1] multifor [sx, sy, sz] = [p, p, p] { test[sx, sy, sz] }