@Override public Vector2 clone() { return new Vector2(this); }
protected float getJustificationXOffset(final int lineIndex) { float cursorX = 0; switch (_justify) { case Left: cursorX = 0; break; case Center: cursorX = 0.5f * (_size.getXf() - _lineWidths[lineIndex]); break; case Right: cursorX = _size.getXf() - _lineWidths[lineIndex]; break; } return cursorX; }
final Vector2 radialFraction = new Vector2(); final Vector2 texCoord = new Vector2(); final Vector2 radialInner = new Vector2(); for (int radialCount = 0; radialCount < _radialSamples; radialCount++) { final double angle = MathUtils.TWO_PI * inverseRadial * radialCount; final double cos = MathUtils.cos(angle); final double sin = MathUtils.sin(angle); final Vector2 radial = new Vector2(cos, sin); radialInner.set(radial).multiplyLocal(_innerRadius); radialFraction.set(radial).multiplyLocal(shellCount); radialFraction.multiplyLocal(_radius - _innerRadius).addLocal(radialInner); BufferUtils.setInBuffer(radialFraction, _meshData.getVertexBuffer(), i); texCoord.setX(txOff + txScale * 0.5 * (1.0 + radialFraction.getX() / _radius)); texCoord.setY(tyOff + tyScale * 0.5 * (1.0 + radialFraction.getY() / _radius)); BufferUtils.setInBuffer(texCoord, _meshData.getTextureCoords(0).getBuffer(), i);
@Test public void testGetSet() { final Vector2 vec1 = new Vector2(); vec1.setX(0); assertTrue(vec1.getX() == 0.0); vec1.setX(Double.POSITIVE_INFINITY); assertTrue(vec1.getX() == Double.POSITIVE_INFINITY); vec1.setX(Double.NEGATIVE_INFINITY); assertTrue(vec1.getX() == Double.NEGATIVE_INFINITY); assertTrue(vec1.getValue(0) == Double.NEGATIVE_INFINITY); vec1.setY(0); assertTrue(vec1.getY() == 0.0); vec1.setY(Double.POSITIVE_INFINITY); assertTrue(vec1.getY() == Double.POSITIVE_INFINITY); vec1.setY(Double.NEGATIVE_INFINITY); assertTrue(vec1.getY() == Double.NEGATIVE_INFINITY); assertTrue(vec1.getValue(1) == Double.NEGATIVE_INFINITY); vec1.set(Math.PI, Math.PI); assertTrue(vec1.getXf() == (float) Math.PI); assertTrue(vec1.getYf() == (float) Math.PI); final Vector2 vec2 = new Vector2(); vec2.set(vec1); assertEquals(vec1, vec2); vec1.setValue(0, 0); vec1.setValue(1, 0); assertEquals(Vector2.ZERO, vec1);
@Test public void testRotate() { final Vector2 vec1 = new Vector2(1, 0); final Vector2 vec2 = vec1.rotateAroundOrigin(MathUtils.HALF_PI, true, null); final Vector2 vec2B = vec1.rotateAroundOrigin(MathUtils.HALF_PI, false, new Vector2()); assertEquals(new Vector2(0, -1), vec2); assertEquals(new Vector2(0, 1), vec2B); vec2.rotateAroundOriginLocal(MathUtils.HALF_PI, false); assertEquals(new Vector2(1, 0), vec2); vec2.rotateAroundOriginLocal(MathUtils.PI, true); assertTrue(Math.abs(vec2.getX() - -1) <= MathUtils.EPSILON); assertTrue(Math.abs(vec2.getY() - 0) <= MathUtils.EPSILON); }
final Vector2 radialOffset = new Vector2(); final Vector2 radialEdge = new Vector2(); final Vector2 texCoord = new Vector2(); final FloatBuffer vertBuffer = _meshData.getVertexBuffer(); final FloatBuffer texBuffer = _meshData.getTextureBuffer(0); final float radialU = txOff + leftOffTx + (txScale - leftOffTx - rightOffTx) * ((float) x / (radialVerts - 1)); final Vector2 radial = new Vector2(MathUtils.sin(angle), MathUtils.cos(angle)); radialOffset.set(radial).multiplyLocal(_innerRadius); radialEdge.zero().addLocal(radialOffset); BufferUtils.setInBuffer(radialEdge, vertBuffer, i); texCoord.set(radialU, tyOff + tyScale); BufferUtils.setInBuffer(texCoord, texBuffer, i++); radialEdge.set(radial).multiplyLocal(bottomBrd).addLocal(radialOffset); BufferUtils.setInBuffer(radialEdge, vertBuffer, i); texCoord.set(radialU, tyOff + tyScale - topOffTx); BufferUtils.setInBuffer(texCoord, texBuffer, i++); radialEdge.set(radial).multiplyLocal(_radius - _innerRadius - topBrd).addLocal(radialOffset); BufferUtils.setInBuffer(radialEdge, vertBuffer, i); texCoord.set(radialU, tyOff + bottomOffTx); BufferUtils.setInBuffer(texCoord, texBuffer, i++); radialEdge.set(radial).multiplyLocal(_radius - _innerRadius).addLocal(radialOffset); BufferUtils.setInBuffer(radialEdge, vertBuffer, i); texCoord.set(radialU, tyOff);
/** * Sets the correct texture array for the box. */ private void setTextureData() { if (_meshData.getTextureBuffer(0) == null) { _meshData.setTextureBuffer(BufferUtils.createVector2Buffer(24), 0); for (int x = 0; x < 6; x++) { _meshData.getTextureCoords(0).getBuffer().put(_texTopRight.getXf()).put(_texTopRight.getYf()); _meshData.getTextureCoords(0).getBuffer().put(_texTopLeft.getXf()).put(_texTopLeft.getYf()); _meshData.getTextureCoords(0).getBuffer().put(_texBotLeft.getXf()).put(_texBotLeft.getYf()); _meshData.getTextureCoords(0).getBuffer().put(_texBotRight.getXf()).put(_texBotRight.getYf()); } } }
@Test public void testPolarAngle() { final Vector2 vec1 = new Vector2(); assertTrue(0.0 == vec1.getPolarAngle()); vec1.set(1.0, 0.0); // 0 assertTrue(Math.abs(0 - vec1.getPolarAngle()) <= MathUtils.EPSILON); vec1.set(0.0, 1.0); // -HALF_PI assertTrue(Math.abs(-MathUtils.HALF_PI - vec1.getPolarAngle()) <= MathUtils.EPSILON); vec1.set(-1.0, 0.0); // -PI assertTrue(Math.abs(-MathUtils.PI - vec1.getPolarAngle()) <= MathUtils.EPSILON); vec1.set(0, -1.0); // HALF_PI assertTrue(Math.abs(MathUtils.HALF_PI - vec1.getPolarAngle()) <= MathUtils.EPSILON); }
@Test public void testAdd() { final Vector2 vec1 = new Vector2(); final Vector2 vec2 = new Vector2(Vector2.ONE); vec1.addLocal(1, 2); assertEquals(new Vector2(1, 2), vec1); vec1.addLocal(-1, -2); assertEquals(Vector2.ZERO, vec1); vec1.zero(); vec1.addLocal(vec2); assertEquals(Vector2.ONE, vec1); vec1.zero(); final Vector2 vec3 = vec1.add(vec2, new Vector2()); assertEquals(Vector2.ZERO, vec1); assertEquals(Vector2.ONE, vec3); final Vector2 vec4 = vec1.add(1, 0, null); assertEquals(Vector2.ZERO, vec1); assertEquals(Vector2.UNIT_X, vec4); }
@Test public void testMultiply() { final Vector2 vec1 = new Vector2(1, -1); final Vector2 vec2 = vec1.multiply(2.0, null); final Vector2 vec2B = vec1.multiply(2.0, new Vector2()); assertEquals(new Vector2(2.0, -2.0), vec2); assertEquals(new Vector2(2.0, -2.0), vec2B); vec2.multiplyLocal(0.5); assertEquals(new Vector2(1.0, -1.0), vec2); final Vector2 vec3 = vec1.multiply(vec2, null); final Vector2 vec3B = vec1.multiply(vec2, new Vector2()); assertEquals(Vector2.ONE, vec3); assertEquals(Vector2.ONE, vec3B); final Vector2 vec4 = vec1.multiply(2, 3, null); final Vector2 vec4B = vec1.multiply(2, 3, new Vector2()); assertEquals(new Vector2(2, -3), vec4); assertEquals(new Vector2(2, -3), vec4B); vec1.multiplyLocal(0.5, 0.5); assertEquals(new Vector2(0.5, -0.5), vec1); vec1.multiplyLocal(vec2); assertEquals(new Vector2(0.5, 0.5), vec1); }
/** * Multiply and store a Vector2 in-buffer. * * @param toMult * the vector to multiply against * @param buf * the buffer to find the Vector2 within * @param index * the position (in terms of vectors, not floats) of the vector to multiply */ public static void multInBuffer(final ReadOnlyVector2 toMult, final FloatBuffer buf, final int index) { final Vector2 temp = Vector2.fetchTempInstance(); populateFromBuffer(temp, buf, index); temp.multiplyLocal(toMult); setInBuffer(temp, buf, index); Vector2.releaseTempInstance(temp); }
/** * Add to a Vector2 in-buffer. * * @param toAdd * the vector to add from * @param buf * the buffer to find the Vector2 within * @param index * the position (in terms of vectors, not floats) of the vector to add to */ public static void addInBuffer(final ReadOnlyVector2 toAdd, final FloatBuffer buf, final int index) { final Vector2 temp = Vector2.fetchTempInstance(); populateFromBuffer(temp, buf, index); temp.addLocal(toAdd); setInBuffer(temp, buf, index); Vector2.releaseTempInstance(temp); }
@Test public void testScaleAdd() { final Vector2 vec1 = new Vector2(1, 1); final Vector2 vec2 = vec1.scaleAdd(2.0, new Vector2(1, 2), null); final Vector2 vec2B = vec1.scaleAdd(2.0, new Vector2(1, 2), new Vector2()); assertEquals(new Vector2(3.0, 4.0), vec2); assertEquals(new Vector2(3.0, 4.0), vec2B); vec1.scaleAddLocal(2.0, new Vector2(1, 2)); assertEquals(vec2, vec1); }