Просмотр исходного кода

Added isSimilar() to Quaternion, Vector2f, Vector3f and Vector4f (#1015)

* Added isSimilar() to Quaternion.

* Added isSimilar() to Vector2f.

* Added isSimilar() to Vector3f.

* Added isSimilar() to Vector4f.

* Modified isSimilar() to consider NaN.
Ali-RS 6 лет назад
Родитель
Сommit
7363662f21

+ 24 - 1
jme3-core/src/main/java/com/jme3/math/Quaternion.java

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2019 jMonkeyEngine
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -1279,6 +1279,29 @@ public final class Quaternion implements Savable, Cloneable, java.io.Serializabl
         }
         return true;
     }
+    
+    /**
+     * Returns true if this quaternion is similar to the specified quaternion
+     * within some value of epsilon.
+     */
+    public boolean isSimilar(Quaternion other, float epsilon) {
+        if (other == null) {
+            return false;
+        }
+        if (Float.compare(Math.abs(other.x - x), epsilon) > 0) {
+            return false;
+        }
+        if (Float.compare(Math.abs(other.y - y), epsilon) > 0) {
+            return false;
+        }
+        if (Float.compare(Math.abs(other.z - z), epsilon) > 0) {
+            return false;
+        }
+        if (Float.compare(Math.abs(other.w - w), epsilon) > 0) {
+            return false;
+        }
+        return true;
+    }
 
     /**
      * 

+ 18 - 1
jme3-core/src/main/java/com/jme3/math/Vector2f.java

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2019 jMonkeyEngine
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -693,6 +693,23 @@ public final class Vector2f implements Savable, Cloneable, java.io.Serializable
             return false;
         return true;
     }
+    
+    /**
+     * Returns true if this vector is similar to the specified vector within
+     * some value of epsilon.
+     */
+    public boolean isSimilar(Vector2f other, float epsilon) {
+        if (other == null) {
+            return false;
+        }
+        if (Float.compare(Math.abs(other.x - x), epsilon) > 0) {
+            return false;
+        }
+        if (Float.compare(Math.abs(other.y - y), epsilon) > 0) {
+            return false;
+        }
+        return true;
+    }
 
     /**
      * <code>toString</code> returns the string representation of this vector

+ 21 - 1
jme3-core/src/main/java/com/jme3/math/Vector3f.java

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2019 jMonkeyEngine
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -969,6 +969,26 @@ public final class Vector3f implements Savable, Cloneable, java.io.Serializable
         if (Float.compare(z,comp.z) != 0) return false;
         return true;
     }
+    
+    /**
+     * Returns true if this vector is similar to the specified vector within
+     * some value of epsilon.
+     */
+    public boolean isSimilar(Vector3f other, float epsilon) {
+        if (other == null) {
+            return false;
+        }
+        if (Float.compare(Math.abs(other.x - x), epsilon) > 0) {
+            return false;
+        }
+        if (Float.compare(Math.abs(other.y - y), epsilon) > 0) {
+            return false;
+        }
+        if (Float.compare(Math.abs(other.z - z), epsilon) > 0) {
+            return false;
+        }
+        return true;
+    }
 
     /**
      * <code>hashCode</code> returns a unique code for this vector object based

+ 25 - 2
jme3-core/src/main/java/com/jme3/math/Vector4f.java

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2019 jMonkeyEngine
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -874,6 +874,29 @@ public final class Vector4f implements Savable, Cloneable, java.io.Serializable
         if (Float.compare(w,comp.w) != 0) return false;
         return true;
     }
+    
+    /**
+     * Returns true if this vector is similar to the specified vector within
+     * some value of epsilon.
+     */
+    public boolean isSimilar(Vector4f other, float epsilon) {
+        if (other == null) {
+            return false;
+        }
+        if (Float.compare(Math.abs(other.x - x), epsilon) > 0) {
+            return false;
+        }
+        if (Float.compare(Math.abs(other.y - y), epsilon) > 0) {
+            return false;
+        }
+        if (Float.compare(Math.abs(other.z - z), epsilon) > 0) {
+            return false;
+        }
+        if (Float.compare(Math.abs(other.w - w), epsilon) > 0) {
+            return false;
+        }
+        return true;
+    }
 
     /**
      * <code>hashCode</code> returns a unique code for this vector object based
@@ -1001,4 +1024,4 @@ public final class Vector4f implements Savable, Cloneable, java.io.Serializable
         throw new IllegalArgumentException("index must be either 0, 1, 2 or 3");
     }
 
-}
+}