@Override public Quaternion clone() { return new Quaternion(this); }
/** * @return An instance of Quaternion that is intended for temporary use in calculations and so forth. Multiple calls * to the method should return instances of this class that are not currently in use. */ public final static Quaternion fetchTempInstance() { if (MathConstants.useMathPools) { return Quaternion.QUAT_POOL.fetch(); } else { return new Quaternion(); } }
/** * @return An instance of Quaternion that is intended for temporary use in calculations and so forth. Multiple calls * to the method should return instances of this class that are not currently in use. */ public final static Quaternion fetchTempInstance() { if (MathConstants.useMathPools) { return Quaternion.QUAT_POOL.fetch(); } else { return new Quaternion(); } }
@Test(expected = ArrayIndexOutOfBoundsException.class) public void testBadEuler2() { final Quaternion quat = new Quaternion(); quat.toEulerAngles(new double[2]); }
public void write(final OutputCapsule capsule) throws IOException { capsule.write(_rotation, "rotation", new Quaternion(Quaternion.IDENTITY)); capsule.write(_scale, "scale", new Vector3(Vector3.ONE)); capsule.write(_translation, "translation", new Vector3(Vector3.ZERO)); }
@Test(expected = ArrayIndexOutOfBoundsException.class) public void testBadArray() { final Quaternion quat = new Quaternion(); quat.toArray(new double[2]); }
@Test(expected = ArrayIndexOutOfBoundsException.class) public void testBadAxesArray() { final Quaternion quat = new Quaternion(); quat.toAxes(new Vector3[2]); }
public void write(final OutputCapsule capsule) throws IOException { capsule.write(_rotation, "rotation", new Quaternion(Quaternion.IDENTITY)); capsule.write(_scale, "scale", new Vector3(Vector3.ONE)); capsule.write(_translation, "translation", new Vector3(Vector3.ZERO)); }
@Test(expected = IllegalArgumentException.class) public void testBadRotationColumn2() { new Quaternion().getRotationColumn(4, null); }
@Test public void testSimpleHash() { // Just a simple sanity check. final Quaternion quat1 = new Quaternion(1, 2, 3, 4); final Quaternion quat2 = new Quaternion(1, 2, 3, 4); final Quaternion quat3 = new Quaternion(1, 2, 3, 0); assertTrue(quat1.hashCode() == quat2.hashCode()); assertTrue(quat1.hashCode() != quat3.hashCode()); }
@Test public void testDot() { final Quaternion quat = new Quaternion(7, 2, 5, -1); assertTrue(35.0 == quat.dot(3, 1, 2, -2)); assertTrue(-11.0 == quat.dot(new Quaternion(-1, 1, -1, 1))); }
public MoveWidget withXAxis(final ReadOnlyColorRGBA color, final double scale, final double width, final double lengthGap, final double tipGap) { if (_xArrow != null) { _xArrow.removeFromParent(); } _xColor.set(color); _xArrow = new InteractArrow("xMoveArrow", scale, width, lengthGap, tipGap); _xArrow.setDefaultColor(color); final Quaternion rotate = new Quaternion().fromAngleAxis(MathUtils.HALF_PI, Vector3.UNIT_Y); _xArrow.setRotation(rotate); _handle.attachChild(_xArrow); return this; }
public void read(final InputCapsule capsule) throws IOException { setRotation((Quaternion) capsule.readSavable("rotation", new Quaternion(Quaternion.IDENTITY))); setScale((Vector3) capsule.readSavable("scale", new Vector3(Vector3.ONE))); setTranslation((Vector3) capsule.readSavable("rotation", new Vector3(Vector3.ZERO))); } }
public void read(final InputCapsule capsule) throws IOException { setRotation((Quaternion) capsule.readSavable("rotation", new Quaternion(Quaternion.IDENTITY))); setScale((Vector3) capsule.readSavable("scale", new Vector3(Vector3.ONE))); setTranslation((Vector3) capsule.readSavable("rotation", new Vector3(Vector3.ZERO))); } }
@Test public void testApplyToZero() { assertEquals(Vector3.ZERO, new Quaternion().apply(new Vector3(0, 0, 0), null)); }
@Test public void testClone() { final Quaternion quat1 = new Quaternion(); final Quaternion quat2 = quat1.clone(); assertEquals(quat1, quat2); assertNotSame(quat1, quat2); }
@Test public void testNormalize() { final Quaternion quat = new Quaternion(0, 1, 2, 3); final Quaternion quat2 = quat.normalize(null); assertEquals(quat2, quat.normalizeLocal()); assertTrue(Math.abs(1 - quat.magnitude()) <= MathUtils.EPSILON); assertTrue(Math.abs(1 - quat2.magnitude()) <= MathUtils.EPSILON); }
@Test(expected = InvalidTransformException.class) public void testSetRotationReadOnlyQuaternion() { final ValidatingTransform vt1 = new ValidatingTransform(); final Quaternion rotation = new Quaternion(); vt1.setRotation(rotation); // good rotation.setX(Double.NaN); vt1.setRotation(rotation); // bad }
@Test public void testAxes() { final Matrix3 rot = new Matrix3().applyRotationX(MathUtils.QUARTER_PI).applyRotationY(MathUtils.HALF_PI); final Quaternion quat1 = new Quaternion().fromAxes(rot.getColumn(0, null), rot.getColumn(1, null), rot.getColumn(2, null)); final Quaternion quat2 = new Quaternion().fromRotationMatrix(rot); assertEquals(quat2, quat1); final Vector3[] axes = quat1.toAxes(new Vector3[3]); quat1.fromAxes(axes[0], axes[1], axes[2]); assertEquals(quat2, quat1); }
@Test public void testLookAt() { final Vector3 direction = new Vector3(-1, 0, 0); final Quaternion quat = new Quaternion().lookAt(direction, Vector3.UNIT_Y); assertTrue(Math.abs(direction.distance(quat.apply(Vector3.UNIT_Z, null))) <= Quaternion.ALLOWED_DEVIANCE); direction.set(1, 1, 1).normalizeLocal(); quat.lookAt(direction, Vector3.UNIT_Y); assertTrue(Math.abs(direction.distance(quat.apply(Vector3.UNIT_Z, null))) <= Quaternion.ALLOWED_DEVIANCE); direction.set(-1, 2, -1).normalizeLocal(); quat.lookAt(direction, Vector3.UNIT_Y); assertTrue(Math.abs(direction.distance(quat.apply(Vector3.UNIT_Z, null))) <= Quaternion.ALLOWED_DEVIANCE); }