From 877dad46c603b6296edf4ed5f0cf1c40e2fe387d Mon Sep 17 00:00:00 2001 From: Alnotz Date: Fri, 19 May 2023 02:55:12 +0200 Subject: [PATCH] Don't know how to create my hybrid DualQuaternion --- fr/alnotz/IsDualQuaternion.java | 5 +++++ fr/alnotz/Quaternion.java | 38 +++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 fr/alnotz/IsDualQuaternion.java diff --git a/fr/alnotz/IsDualQuaternion.java b/fr/alnotz/IsDualQuaternion.java new file mode 100644 index 0000000..f589174 --- /dev/null +++ b/fr/alnotz/IsDualQuaternion.java @@ -0,0 +1,5 @@ +package fr.alnotz; + +public interface IsDualQuaternion { + /*…*/ +} diff --git a/fr/alnotz/Quaternion.java b/fr/alnotz/Quaternion.java index bc4328b..6982151 100644 --- a/fr/alnotz/Quaternion.java +++ b/fr/alnotz/Quaternion.java @@ -17,6 +17,44 @@ public class Quaternion implements IsQuaternion{ this.j = j; this.k = k; } + public static Quaternion plus(IsQuaternion quaternion0, IsQuaternion quaternion1){ + return new Quaternion(quaternion0.getS() + quaternion1.getS(), + quaternion0.getI() + quaternion1.getI(), + quaternion0.getJ() + quaternion1.getJ(), + quaternion0.getK() + quaternion1.getK()); + } + public static Quaternion times(IsQuaternion quaternion0, IsQuaternion quaternion1){ + /* + * (a0 + b0i + c0j + d0k)(a1 + b1i + c1j + d1k) + * (a0a1 - b0b1 - c0c1 - d0d1) + + * (a0b1 + b0a1 + c0d1 - d0c1)i + + * (a0c1 - b0d1 + c0a1 + d0b1)j + + * (a0d1 + b0c1 - c0b1 + d0a1)k + */ + double newS = quaternion0.getS() * quaternion1.getS() - + quaternion1.getI() * quaternion1.getI() - + quaternion0.getJ() * quaternion1.getJ() - + quaternion0.getK() * quaternion1.getK(); + double newI = quaternion0.getS() * quaternion1.getI() + + quaternion0.getI() * quaternion1.getK() + + quaternion0.getJ() * quaternion1.getS() - + quaternion0.getK() * quaternion1.getJ(); + double newJ = quaternion0.getS() * quaternion1.getJ() - + quaternion0.getI() * quaternion1.getK() + + quaternion0.getJ() * quaternion1.getS() + + quaternion0.getK() * quaternion1.getI(); + double newK = quaternion0.getS() * quaternion1.getK() + + quaternion0.getI() * quaternion1.getJ() - + quaternion0.getJ() * quaternion1.getI() + + quaternion0.getK() * quaternion1.getS(); + return new Quaternion(newS, newI, newJ, newK); + } + public static Quaternion conjugate(IsQuaternion quaternion) { + return new Quaternion(quaternion.getS(), + -1 * quaternion.getI(), + -1 * quaternion.getJ(), + -1 * quaternion.getK()); + } @Override public double getS() { return this.s;