/** * Vraci Quat na zaklade Eulerovych uhlu rotace kolem jednotlivych os * * @param a uhel rotace kolem osy x * @param b uhel rotace kolem osy y * @param c uhel rotace kolem osy z * @return nova instance Quat */ public static Quat fromEulerAngles(double a, double b, double c) { /* * Quat Qi = new Quat(Math.cos(a/2),Math.sin(a/2),0,0); Quat Qj = new * Quat(Math.cos(b/2),0,Math.sin(b/2),0); Quat Qk = new * Quat(Math.cos(c/2),0,0,Math.sin(c/2)); */ Quat Qi = Quat.fromEulerAngle(a, 1, 0, 0); Quat Qj = Quat.fromEulerAngle(b, 0, 1, 0); Quat Qk = Quat.fromEulerAngle(c, 0, 0, 1); return new Quat(Qk.mul(Qj).mul(Qi)); // this.renorm(); }
/** * linearni interpolace pomoci kvaternionu Lerp(Q1,Q2,t)=(1-t)Q1+tQ2 * * @param q kvaternion * @param t vaha z intervalu <0;1> * @return nova instance Quat */ public Quat lerp(Quat q, double t) { if (t >= 1) return new Quat(q); else if (t <= 0) return new Quat(this); else return new Quat((this.mul(1 - t)).add(q.mul(t))); }