altoslib: Improve AltosState save/restore debugging
[fw/altos] / altoslib / AltosQuaternion.java
index f78b50653b4e474849418db7cbfb7575517f3fb5..98c2fe51322851e5b7fb1e5b95723fc173f4655e 100644 (file)
@@ -15,9 +15,9 @@
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
-package org.altusmetrum.altoslib_8;
+package org.altusmetrum.altoslib_11;
 
-public class AltosQuaternion {
+public class AltosQuaternion implements AltosJsonable {
        double  r;              /* real bit */
        double  x, y, z;        /* imaginary bits */
 
@@ -115,10 +115,17 @@ public class AltosQuaternion {
        }
 
        public AltosQuaternion(AltosQuaternion q) {
-               this.r = q.r;
-               this.x = q.x;
-               this.y = q.y;
-               this.z = q.z;
+               r = q.r;
+               x = q.x;
+               y = q.y;
+               z = q.z;
+       }
+
+       public AltosQuaternion() {
+               r = 1;
+               x = 0;
+               y = 0;
+               z = 0;
        }
 
        static public AltosQuaternion vector(double x, double y, double z) {
@@ -147,4 +154,24 @@ public class AltosQuaternion {
                                           c_x * s_y * c_z + s_x * c_y * s_z,
                                           c_x * c_y * s_z - s_x * s_y * c_z);
        }
+
+       public AltosJson json() {
+               AltosJson j = new AltosJson();
+
+               j.put("r", r);
+               j.put("x", x);
+               j.put("y", y);
+               j.put("z", z);
+               return j;
+       }
+
+       public AltosQuaternion(AltosJson j) {
+               if (j == null)
+                       return;
+
+               r = j.get_double("r", 1);
+               x = j.get_double("x", 0);
+               y = j.get_double("y", 0);
+               z = j.get_double("z", 0);
+       }
 }