From 877dad46c603b6296edf4ed5f0cf1c40e2fe387d Mon Sep 17 00:00:00 2001
From: Alnotz <fredh0001@net-c.fr>
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;