You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2012/09/21 12:42:31 UTC
svn commit: r1388406 - in /commons/proper/math/trunk/src:
main/java/org/apache/commons/math3/complex/Quaternion.java
test/java/org/apache/commons/math3/complex/QuaternionTest.java
Author: erans
Date: Fri Sep 21 10:42:30 2012
New Revision: 1388406
URL: http://svn.apache.org/viewvc?rev=1388406&view=rev
Log:
MATH-863
Patch provided by Julien Anxionnat:
* method name change,
* bug fix and unit test for "dotProduct" (instance method).
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/complex/Quaternion.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/complex/QuaternionTest.java
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/complex/Quaternion.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/complex/Quaternion.java?rev=1388406&r1=1388405&r2=1388406&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/complex/Quaternion.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/complex/Quaternion.java Fri Sep 21 10:42:30 2012
@@ -98,7 +98,7 @@ public final class Quaternion implements
/**
* Builds a pure quaternion from a vector (assuming that the scalar
- * part is zero.
+ * part is zero).
*
* @param v Components of the vector part of the pure quaternion.
*/
@@ -122,7 +122,7 @@ public final class Quaternion implements
* @param q2 Second quaternion.
* @return the product {@code q1} and {@code q2}, in that order.
*/
- public static Quaternion product(final Quaternion q1, final Quaternion q2) {
+ public static Quaternion multiply(final Quaternion q1, final Quaternion q2) {
// Components of the first quaternion.
final double q1a = q1.getQ0();
final double q1b = q1.getQ1();
@@ -151,7 +151,7 @@ public final class Quaternion implements
* @return the product of this instance with {@code q}, in that order.
*/
public Quaternion multiply(final Quaternion q) {
- return product(this, q);
+ return multiply(this, q);
}
/**
@@ -220,13 +220,13 @@ public final class Quaternion implements
}
/**
- * Compute the dot-product of the instance by a quaternion.
+ * Computes the dot-product of the instance by a quaternion.
*
* @param q Quaternion.
* @return the dot product of this instance and {@code q}.
*/
public double dotProduct(final Quaternion q) {
- return dotProduct(q);
+ return dotProduct(this, q);
}
/**
Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/complex/QuaternionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/complex/QuaternionTest.java?rev=1388406&r1=1388405&r2=1388406&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math3/complex/QuaternionTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math3/complex/QuaternionTest.java Fri Sep 21 10:42:30 2012
@@ -6,7 +6,6 @@ import org.apache.commons.math3.exceptio
import org.apache.commons.math3.exception.ZeroException;
import org.apache.commons.math3.geometry.euclidean.threed.Rotation;
import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
-import org.apache.commons.math3.util.Precision;
import org.apache.commons.math3.util.FastMath;
import org.junit.Test;
import org.junit.Assert;
@@ -76,7 +75,7 @@ public class QuaternionTest {
final Quaternion qA = new Quaternion(1, 0.5, -3, 4);
final Quaternion qB = new Quaternion(6, 2, 1, -9);
- final Quaternion qResult = Quaternion.product(qA, qB);
+ final Quaternion qResult = Quaternion.multiply(qA, qB);
Assert.assertEquals(44, qResult.getQ0(), EPS);
Assert.assertEquals(28, qResult.getQ1(), EPS);
@@ -104,8 +103,8 @@ public class QuaternionTest {
// Conjugate of the product of two quaternions and product of their conjugates :
// Conj(qA * qB) = Conj(qB) * Conj(qA)
- final Quaternion conjugateOfProduct = Quaternion.product(qB.getConjugate(), qA.getConjugate());
- final Quaternion productOfConjugate = (Quaternion.product(qA, qB)).getConjugate();
+ final Quaternion conjugateOfProduct = qB.getConjugate().multiply(qA.getConjugate());
+ final Quaternion productOfConjugate = (qA.multiply(qB)).getConjugate();
Assert.assertEquals(conjugateOfProduct.getQ0(), productOfConjugate.getQ0(), EPS);
Assert.assertEquals(conjugateOfProduct.getQ1(), productOfConjugate.getQ1(), EPS);
@@ -120,7 +119,7 @@ public class QuaternionTest {
final Quaternion quaternion = new Quaternion(4, 7, -1, 2);
final double[] vector = {2.0, 1.0, 3.0};
- final Quaternion qResultQxV = Quaternion.product(quaternion, new Quaternion(vector));
+ final Quaternion qResultQxV = Quaternion.multiply(quaternion, new Quaternion(vector));
Assert.assertEquals(-19, qResultQxV.getQ0(), EPS);
Assert.assertEquals(3, qResultQxV.getQ1(), EPS);
@@ -143,7 +142,7 @@ public class QuaternionTest {
// Case : Product between a vector and a quaternion : VxQ
- final Quaternion qResultVxQ = Quaternion.product(new Quaternion(vector), quaternion);
+ final Quaternion qResultVxQ = Quaternion.multiply(new Quaternion(vector), quaternion);
Assert.assertEquals(-19, qResultVxQ.getQ0(), EPS);
Assert.assertEquals(13, qResultVxQ.getQ1(), EPS);
@@ -172,9 +171,11 @@ public class QuaternionTest {
final Quaternion q1 = new Quaternion(1, 2, 2, 1);
final Quaternion q2 = new Quaternion(3, -2, -1, -3);
- final double actual = Quaternion.dotProduct(q1, q2);
+ final double actual1 = Quaternion.dotProduct(q1, q2);
+ final double actual2 = q1.dotProduct(q2);
- Assert.assertEquals(expected, actual, EPS);
+ Assert.assertEquals(expected, actual1, EPS);
+ Assert.assertEquals(expected, actual2, EPS);
}
@Test
@@ -207,12 +208,18 @@ public class QuaternionTest {
final Quaternion q1 = new Quaternion(1., 2., -2., -1.);
final Quaternion q2 = new Quaternion(3., -3., 4., -3.);
- final Quaternion q = Quaternion.add(q1, q2);
+ final Quaternion qa = Quaternion.add(q1, q2);
+ final Quaternion qb = q1.add(q2);
- Assert.assertEquals(w, q.getQ0(), EPS);
- Assert.assertEquals(x, q.getQ1(), EPS);
- Assert.assertEquals(y, q.getQ2(), EPS);
- Assert.assertEquals(z, q.getQ3(), EPS);
+ Assert.assertEquals(w, qa.getQ0(), EPS);
+ Assert.assertEquals(x, qa.getQ1(), EPS);
+ Assert.assertEquals(y, qa.getQ2(), EPS);
+ Assert.assertEquals(z, qa.getQ3(), EPS);
+
+ Assert.assertEquals(w, qb.getQ0(), EPS);
+ Assert.assertEquals(x, qb.getQ1(), EPS);
+ Assert.assertEquals(y, qb.getQ2(), EPS);
+ Assert.assertEquals(z, qb.getQ3(), EPS);
}
@Test
@@ -226,13 +233,19 @@ public class QuaternionTest {
final Quaternion q1 = new Quaternion(1., 2., -2., -1.);
final Quaternion q2 = new Quaternion(3., -3., 4., -3.);
- final Quaternion q = Quaternion.subtract(q1, q2);
+ final Quaternion qa = Quaternion.subtract(q1, q2);
+ final Quaternion qb = q1.subtract(q2);
- Assert.assertEquals(w, q.getQ0(), EPS);
- Assert.assertEquals(x, q.getQ1(), EPS);
- Assert.assertEquals(y, q.getQ2(), EPS);
- Assert.assertEquals(z, q.getQ3(), EPS);
- }
+ Assert.assertEquals(w, qa.getQ0(), EPS);
+ Assert.assertEquals(x, qa.getQ1(), EPS);
+ Assert.assertEquals(y, qa.getQ2(), EPS);
+ Assert.assertEquals(z, qa.getQ3(), EPS);
+
+ Assert.assertEquals(w, qb.getQ0(), EPS);
+ Assert.assertEquals(x, qb.getQ1(), EPS);
+ Assert.assertEquals(y, qb.getQ2(), EPS);
+ Assert.assertEquals(z, qb.getQ3(), EPS);
+}
@Test
public final void testNorm() {
@@ -247,7 +260,7 @@ public class QuaternionTest {
Assert.assertEquals(Math.sqrt(30), norm, 0);
- final double normSquareRef = Quaternion.product(q, q.getConjugate()).getScalarPart();
+ final double normSquareRef = Quaternion.multiply(q, q.getConjugate()).getScalarPart();
Assert.assertEquals(Math.sqrt(normSquareRef), norm, 0);
}
@@ -382,7 +395,7 @@ public class QuaternionTest {
Assert.assertEquals(-2.0 / 28.5, inverseQ.getQ2(), 0);
Assert.assertEquals(2.5 / 28.5, inverseQ.getQ3(), 0);
- final Quaternion product = Quaternion.product(inverseQ, q);
+ final Quaternion product = Quaternion.multiply(inverseQ, q);
Assert.assertEquals(1, product.getQ0(), EPS);
Assert.assertEquals(0, product.getQ1(), EPS);
Assert.assertEquals(0, product.getQ2(), EPS);