// Обратный кватернион public TQuaternion Reverse() { TQuaternion result = this.Conjugate(); double n = Norm() * Norm(); for (int i = 0; i < 4; i++) { result.Vec[i] = result.Vec[i] / n; } return(result); }
// Нормализация кватерниона public TQuaternion Normalization() { TQuaternion result = new TQuaternion(Vec[0], Vec[1], Vec[2], this.Vec[3]); double n = this.Norm(); for (int i = 0; i < 4; i++) { result.Vec[i] = result.Vec[i] / n; } return(result); }
// Умножение на кватернион public TQuaternion Mult(TQuaternion Q) { double a, b, c, d; a = Vec[0] * Q.Vec[0] - Vec[1] * Q.Vec[1] - Vec[2] * Q.Vec[2] - Vec[3] * Q.Vec[3]; b = Vec[0] * Q.Vec[1] + Vec[1] * Q.Vec[0] + Vec[2] * Q.Vec[3] - Vec[3] * Q.Vec[2]; c = Vec[0] * Q.Vec[2] + Vec[2] * Q.Vec[0] - Vec[1] * Q.Vec[3] + Vec[3] * Q.Vec[1]; d = Vec[0] * Q.Vec[3] + Vec[3] * Q.Vec[0] + Vec[1] * Q.Vec[2] - Vec[2] * Q.Vec[1]; TQuaternion result = new TQuaternion(a, b, c, d); return(result); }
// Сумма кватернионов public TQuaternion Sum(TQuaternion Q) { TQuaternion Result = new TQuaternion(Vec[0] + Q.Vec[0], Vec[1] + Q.Vec[1], Vec[2] + Q.Vec[0], Vec[3] + Q.Vec[0]); return(Result); }
// Сопряженный кватернион public TQuaternion Conjugate() { TQuaternion Result = new TQuaternion(Vec[0], -Vec[1], -Vec[2], -Vec[3]); return(Result); }