12 public Quat(double roll, double pitch, double yaw)
14 double euler[] = { roll, pitch, yaw };
18 public void set(double euler[])
20 // Calculate sin/cos of roll/pitch/yaw
21 double sr = Math.sin(euler[0] * 0.5f);
22 double cr = Math.cos(euler[0] * 0.5f);
24 double sp = Math.sin(euler[1] * 0.5f);
25 double cp = Math.cos(euler[1] * 0.5f);
27 double sy = Math.sin(euler[2] * 0.5f);
28 double cy = Math.cos(euler[2] * 0.5f);
30 // Calculate quaternion
31 double tx = (cr * cp * sy) + (sr * sp * cy);
32 double ty = (sr * cp * cy) + (cr * sp * sy);
33 double tz = (cr * sp * cy) - (sr * cp * sy);
34 double tw = (cr * cp * cy) - (sr * sp * sy);
37 double dist = Math.sqrt(tx*tx + ty*ty + tz*tz + tw*tw);
45 public void get(double[] euler)
47 double test = x*y + z*w;
51 euler[0] = 2 * Math.atan2(x, w);
52 euler[1] = Math.PI / 2;
54 } else if (test < -0.499) {
56 euler[0] = -2 * Math.atan2(x, w);
57 euler[1] = Math.PI / 2;
61 euler[0] = Math.atan2(2*y*w - 2*x*z, 1 - 2*(y*y) - 2*(z*z));
62 euler[1] = Math.asin(2*x*y + 2*z*w);
63 euler[2] = Math.atan2(2*x*w - 2*y*z, 1 - 2*(x*x) - 2*(z*z));
67 public void mul(Quat q)
69 double tw = (w * q.w) - (x * q.x) - (y * q.y) - (z * q.z);
70 double tx = (w * q.x) + (x * q.w) + (y * q.z) - (z * q.y);
71 double ty = (w * q.y) - (x * q.z) + (y * q.w) + (z * q.x);
72 double tz = (w * q.z) + (x * q.y) - (y * q.x) + (z * q.w);
80 public void print(String label)
82 double euler[] = {0, 0, 0};
84 System.out.format("%8s rpy - %7.2f %7.2f %7.2f\n",
88 euler[2]*180/Math.PI);
91 public static void test() {
92 Quat id = new Quat(0, 0, 0);
93 Quat r90 = new Quat(Math.PI/2, 0, 0);
94 Quat p90 = new Quat(0, Math.PI/2, 0);
95 Quat y90 = new Quat(0, 0, Math.PI/2);
97 Quat sum = new Quat();
99 System.out.println("Init");
104 System.out.println("Roll:");
105 sum.mul(r90); sum.print("sum");
106 sum.mul(r90); sum.print("sum");
107 sum.mul(r90); sum.print("sum");
108 sum.mul(r90); sum.print("sum");
110 System.out.println("Pitch:");
111 sum.mul(p90); sum.print("sum");
112 sum.mul(p90); sum.print("sum");
113 sum.mul(p90); sum.print("sum");
114 sum.mul(p90); sum.print("sum");
116 System.out.println("Yaw:");
117 sum.mul(y90); sum.print("sum");
118 sum.mul(y90); sum.print("sum");
119 sum.mul(y90); sum.print("sum");
120 sum.mul(y90); sum.print("sum");
122 System.out.println("Test:");
123 sum.mul(r90); sum.print("sum");
124 sum.mul(p90); sum.print("sum");
125 sum.mul(y90); sum.print("sum");
126 sum.mul(p90); sum.print("sum");
127 sum.mul(y90); sum.print("sum");
128 sum.mul(y90); sum.print("sum");