/** * Decrements the values of this vector by the x, y, z and w values from the given source vector. * * @param source * @return this vector for chaining * @throws NullPointerException * if source is null. */ public Vector4 subtractLocal(final ReadOnlyVector4 source) { return subtractLocal(source.getX(), source.getY(), source.getZ(), source.getW()); }
/** * Decrements the values of this vector by the x, y, z and w values from the given source vector. * * @param source * @return this vector for chaining * @throws NullPointerException * if source is null. */ public Vector4 subtractLocal(final ReadOnlyVector4 source) { return subtractLocal(source.getX(), source.getY(), source.getZ(), source.getW()); }
private void calculateIntersection(final double planeHeight, final ReadOnlyVector2 screenPosition, final ReadOnlyMatrix4 modelViewProjectionInverseMatrix) { origin.set(screenPosition.getX() * 2 - 1, screenPosition.getY() * 2 - 1, -1, 1); direction.set(screenPosition.getX() * 2 - 1, screenPosition.getY() * 2 - 1, 1, 1); modelViewProjectionInverseMatrix.applyPre(origin, origin); modelViewProjectionInverseMatrix.applyPre(direction, direction); direction.subtractLocal(origin); // final double t = (planeHeight * origin.getW() - origin.getY()) // / (direction.getY() - planeHeight * direction.getW()); if (Math.abs(direction.getY()) > MathUtils.EPSILON) { final double t = (planeHeight - origin.getY()) / direction.getY(); direction.multiplyLocal(t); } else { direction.normalizeLocal(); direction.multiplyLocal(mainCamera.getFrustumFar()); } origin.addLocal(direction); }
private void calculateIntersection(final double planeHeight, final ReadOnlyVector2 screenPosition, final ReadOnlyMatrix4 modelViewProjectionInverseMatrix) { origin.set(screenPosition.getX() * 2 - 1, screenPosition.getY() * 2 - 1, -1, 1); direction.set(screenPosition.getX() * 2 - 1, screenPosition.getY() * 2 - 1, 1, 1); modelViewProjectionInverseMatrix.applyPre(origin, origin); modelViewProjectionInverseMatrix.applyPre(direction, direction); direction.subtractLocal(origin); // final double t = (planeHeight * origin.getW() - origin.getY()) // / (direction.getY() - planeHeight * direction.getW()); if (Math.abs(direction.getY()) > MathUtils.EPSILON) { final double t = (planeHeight - origin.getY()) / direction.getY(); direction.multiplyLocal(t); } else { direction.normalizeLocal(); direction.multiplyLocal(mainCamera.getFrustumFar()); } origin.addLocal(direction); }
@Test public void testSubtract() { final Vector4 vec1 = new Vector4(); final Vector4 vec2 = new Vector4(Vector4.ONE); vec1.subtractLocal(1, 2, 3, 4); assertEquals(new Vector4(-1, -2, -3, -4), vec1); vec1.subtractLocal(-1, -2, -3, -4); assertEquals(Vector4.ZERO, vec1); vec1.zero(); vec1.subtractLocal(vec2); assertEquals(Vector4.NEG_ONE, vec1); vec1.zero(); final Vector4 vec3 = vec1.subtract(vec2, new Vector4()); assertEquals(Vector4.ZERO, vec1); assertEquals(Vector4.NEG_ONE, vec3); final Vector4 vec4 = vec1.subtract(0, 0, 0, 1, null); assertEquals(Vector4.ZERO, vec1); assertEquals(Vector4.NEG_UNIT_W, vec4); }