public static Cuaternion transf_rotar(float angulo, Cuaternion q) { return(new Cuaternion(Convert.ToSingle(Math.Cos((angulo / 2) * (Math.PI / 180))), Convert.ToSingle(Math.Sin((angulo / 2) * (Math.PI / 180))) * q.x, Convert.ToSingle(Math.Sin((angulo / 2) * (Math.PI / 180))) * q.y, Convert.ToSingle(Math.Sin((angulo / 2) * (Math.PI / 180))) * q.z)); }
public static Cuaternion producto_quater(Cuaternion Q1, Cuaternion Q2) { return(new Cuaternion( Q1.A * Q2.A - (Q1.X * Q2.X + Q1.Y * Q2.Y + Q1.Z * Q2.Z), Q1.A * Q2.X + Q2.A * Q1.X + Q1.Y * Q2.Z - Q1.Z * Q2.Y, Q2.A * Q1.Y + Q1.A * Q2.Y + Q1.Z * Q2.X - Q1.X * Q2.Z, Q2.A * Q1.Z + Q1.A * Q2.Z - Q1.Y * Q2.X + Q1.X * Q2.Y)); }
public static float modulo(Cuaternion Q) { float m; m = Convert.ToSingle(Math.Sqrt( Math.Pow(Q.A, 2) + Math.Pow(Q.X, 2) + Math.Pow(Q.Y, 2) + Math.Pow(Q.Z, 2))); return(m); }
public static Cuaternion normalizar(Cuaternion Q) { float d = Q.modulo(); if (d > 0) { Q.a = Q.A / d; Q.x = Q.X / d; Q.y = Q.Y / d; Q.z = Q.Z / d; } return(new Cuaternion(Q)); }
public static Cuaternion quater_inverso(Cuaternion Q) { float d = Q.modulo(); if (d > 0) { Q.a = Q.A; Q.x = (-1) * Q.X; Q.y = (-1) * Q.Y; Q.z = (-1) * Q.Z; } return(new Cuaternion(Convert.ToSingle(Q.A / (Math.Pow(d, 2))), Convert.ToSingle(Q.x / (Math.Pow(d, 2))), Convert.ToSingle(Q.y / (Math.Pow(d, 2))), Convert.ToSingle(Q.z / (Math.Pow(d, 2))))); }
public Cuaternion(Cuaternion q) : this(q.a, q.x, q.y, q.z) { }
public static Cuaternion conjugado(Cuaternion Q) { return(new Cuaternion(Q.A, -1 * Q.X, -1 * Q.Y, -1 * Q.Z)); }
public static float producto_escalar(Cuaternion Q1, Cuaternion Q2) { return(Q1.A * Q2.A + Q1.X * Q2.X + Q1.Y * Q2.Y + Q1.Z * Q2.Z); }
public static Cuaternion resta(Cuaternion Q1, Cuaternion Q2) { return(suma(Q1, op_multiplicarescalar(-1, Q2))); }
public static Cuaternion suma(Cuaternion Q1, Cuaternion Q2) { return(new Cuaternion(Q1.a + Q2.a, Q1.x + Q2.x, Q1.y + Q2.y, Q1.z + Q2.z)); }
public static Cuaternion op_multiplicarescalar(float lambda, Cuaternion Q) { return(new Cuaternion(lambda * Q.a, lambda * Q.x, lambda * Q.y, lambda * Q.z)); }