Undef SearchPath where needed as it is defined via windows.h
[ardour.git] / libs / pbd / pbd / cartesian.h
index b44a12cd3dc58c5406d7ff2648c13633be055ec1..ffc91c2fd62fd709e32d12c6885c78e156dc663c 100644 (file)
 
 namespace PBD {
 
-void azi_ele_to_cart (double azi, double ele, double& x, double& y, double& z);
-void cart_to_azi_ele (double x, double y, double z, double& azi, double& ele);
+void spherical_to_cartesian (double azi, double ele, double len, double& x, double& y, double& z);
+void cartesian_to_spherical (double x, double y, double z, double& azi, double& ele, double& len);
         
 struct AngularVector;
 
 struct CartesianVector {
-    double x;
-    double y;
-    double z;
-
-    CartesianVector () : x(0.0), y(0.0), z(0.0) {}
-    CartesianVector (double xp, double yp, double zp = 0.0) : x(xp), y(yp), z(zp) {}
-
-    CartesianVector& translate (CartesianVector& other, double xtranslate, double ytranslate, double ztranslate = 0.0) {
-            other.x += xtranslate;
-            other.y += ytranslate;
-            other.z += ztranslate;
-            return other;
-    }
-
-    CartesianVector& scale (CartesianVector& other, double xscale, double yscale, double zscale = 1.0) {
-            other.x *= xscale;
-            other.y *= yscale;
-            other.z *= zscale;
-            return other;
-    }
-
-    void angular (AngularVector&) const;
+       double x;
+       double y;
+       double z;
+
+       CartesianVector () : x(0.0), y(0.0), z(0.0) {}
+       CartesianVector (double xp, double yp, double zp = 0.0) : x(xp), y(yp), z(zp) {}
+
+       CartesianVector& translate (CartesianVector& other, double xtranslate, double ytranslate, double ztranslate = 0.0) {
+               other.x += xtranslate;
+               other.y += ytranslate;
+               other.z += ztranslate;
+               return other;
+       }
+
+       CartesianVector& scale (CartesianVector& other, double xscale, double yscale, double zscale = 1.0) {
+               other.x *= xscale;
+               other.y *= yscale;
+               other.z *= zscale;
+               return other;
+       }
+
+       void angular (AngularVector&) const;
 };
 
 struct AngularVector {
-    double azi;
-    double ele;
-    double length;
-
-    AngularVector () : azi(0.0), ele(0.0), length (0.0) {}
-    AngularVector (double a, double e, double l = 1.0) : azi(a), ele(e), length (l) {}
-
-    AngularVector operator- (const AngularVector& other) const {
-            AngularVector r;
-            r.azi = azi - other.azi;
-            r.ele = ele - other.ele;
-            r.length = length - other.length;
-            return r;
-    }
-
-    AngularVector operator+ (const AngularVector& other) const {
-            AngularVector r;
-            r.azi = azi + other.azi;
-            r.ele = ele + other.ele;
-            r.length = length + other.length;
-            return r;
-    }
-
-    bool operator== (const AngularVector& other) const {
-            return fabs (azi - other.azi) <= FLT_EPSILON &&
-                    fabs (ele - other.ele) <= FLT_EPSILON &&
-                    fabs (length - other.length) <= FLT_EPSILON;
-    }
-
-    bool operator!= (const AngularVector& other) const {
-            return fabs (azi - other.azi) > FLT_EPSILON ||
-                    fabs (ele - other.ele) > FLT_EPSILON ||
-                    fabs (length - other.length) > FLT_EPSILON;
-    }
-
-    void cartesian (CartesianVector& c) const {
-            azi_ele_to_cart (azi, ele, c.x, c.y, c.z);
-    }
+       double azi;
+       double ele;
+       double length;
+
+       AngularVector () : azi(0.0), ele(0.0), length (0.0) {}
+       AngularVector (double a, double e, double l = 1.0) : azi(a), ele(e), length (l) {}
+
+       AngularVector operator- (const AngularVector& other) const {
+               AngularVector r;
+               r.azi = azi - other.azi;
+               r.ele = ele - other.ele;
+               r.length = length - other.length;
+               return r;
+       }
+
+       AngularVector operator+ (const AngularVector& other) const {
+               AngularVector r;
+               r.azi = azi + other.azi;
+               r.ele = ele + other.ele;
+               r.length = length + other.length;
+               return r;
+       }
+
+       bool operator== (const AngularVector& other) const {
+               return fabs (azi - other.azi) <= FLT_EPSILON &&
+               fabs (ele - other.ele) <= FLT_EPSILON &&
+               fabs (length - other.length) <= FLT_EPSILON;
+       }
+
+       bool operator!= (const AngularVector& other) const {
+               return fabs (azi - other.azi) > FLT_EPSILON ||
+                       fabs (ele - other.ele) > FLT_EPSILON ||
+                       fabs (length - other.length) > FLT_EPSILON;
+       }
+
+       void cartesian (CartesianVector& c) const {
+               spherical_to_cartesian (azi, ele, length, c.x, c.y, c.z);
+       }
 };
 
-inline
-void CartesianVector::angular (AngularVector& a) const {
-        cart_to_azi_ele (x, y, z, a.azi, a.ele);
+inline void CartesianVector::angular (AngularVector& a) const {
+       cartesian_to_spherical (x, y, z, a.azi, a.ele, a.length);
 }
 
 }