@Override public Line3 clone() { return new Line3(this); }
@Override public void prepare(final ParticleSystem system) { _line.setOrigin(_axis.getOrigin()); _line.setDirection(_axis.getDirection()); final ReadOnlyMatrix3 mat = system.getEmitterTransform().getMatrix(); if (_transformWithScene && !mat.isIdentity()) { final Vector3 temp = Vector3.fetchTempInstance(); mat.applyPost(_line.getOrigin(), temp); _line.setOrigin(temp); mat.applyPost(_line.getDirection(), temp); _line.setDirection(temp); Vector3.releaseTempInstance(temp); } if (_type == VT_CYLINDER) { _rot.fromAngleAxis(-_divergence, _line.getDirection()); } }
public BasicVortex(final double strength, final double divergence, final ReadOnlyLine3 axis, final boolean random, final boolean transformWithScene) { _strength = strength; _divergence = divergence; _axis.set(axis); _height = 0f; _radius = 1f; _random = random; _transformWithScene = transformWithScene; }
@Test public void testEquals() { // couple of equals validity tests final Line3 line1 = new Line3(); assertEquals(line1, line1); assertFalse(line1.equals(null)); assertFalse(line1.equals(new Vector2())); // throw in a couple pool accesses for coverage final Line3 line2 = Line3.fetchTempInstance(); line2.set(line1); assertEquals(line1, line2); assertNotSame(line1, line2); Line3.releaseTempInstance(line2); // cover more of equals assertFalse(line1.equals(new Line3(Vector3.ZERO, Vector3.UNIT_X))); }
public void stateChanged(final ChangeEvent e) { final SimpleParticleInfluenceFactory.BasicVortex vortex = (SimpleParticleInfluenceFactory.BasicVortex) getEdittedInfluence(); final Line3 axis = new Line3(vortex.getAxis()); axis.setDirection(_vortexDirectionPanel.getValue()); vortex.setAxis(axis); } });
@Test public void testValid() { final Line3 line1 = new Line3(); final Line3 line2 = new Line3(new Vector3(Double.NaN, 0, 0), Vector3.UNIT_Z); final Line3 line3 = new Line3(Vector3.ZERO, new Vector3(Double.NaN, 0, 0)); assertTrue(Line3.isValid(line1)); assertFalse(Line3.isValid(line2)); assertFalse(Line3.isValid(line3)); line2.setOrigin(Vector3.ZERO); assertTrue(Line3.isValid(line2)); assertFalse(Line3.isValid(null)); }
@Override public void read(final InputCapsule capsule) throws IOException { super.read(capsule); _type = capsule.readInt("type", VT_CYLINDER); _strength = capsule.readDouble("strength", 1.0); _divergence = capsule.readDouble("divergence", 0.0); _axis.set((Line3) capsule.readSavable("axis", new Line3(new Vector3(), new Vector3(Vector3.UNIT_Y)))); _height = capsule.readDouble("height", 0.0); _radius = capsule.readDouble("radius", 1.0); _random = capsule.readBoolean("random", false); _transformWithScene = capsule.readBoolean("transformWithScene", true); }
@Test public void testDistance() { final Line3 line1 = new Line3(Vector3.ZERO, Vector3.UNIT_Z); final Vector3 store = new Vector3(); assertTrue(0.0 == line1.distanceSquared(new Vector3(0, 0, 5), store)); assertTrue(16.0 == line1.distanceSquared(new Vector3(0, 4, 1), store)); assertEquals(Vector3.UNIT_Z, store); assertTrue(9.0 == line1.distanceSquared(new Vector3(0, -3, -1), store)); assertEquals(Vector3.NEG_UNIT_Z, store); assertTrue(1.0 == line1.distanceSquared(Vector3.NEG_UNIT_X, null)); }
@Test public void testSimpleHash() { // Just a simple sanity check. final Line3 line1 = new Line3(Vector3.ZERO, Vector3.UNIT_Y); final Line3 line2 = new Line3(Vector3.ZERO, Vector3.UNIT_Y); final Line3 line3 = new Line3(Vector3.ZERO, Vector3.UNIT_Z); assertTrue(line1.hashCode() == line2.hashCode()); assertTrue(line1.hashCode() != line3.hashCode()); }
@Override public void apply(final double dt, final Particle p, final int index) { final double dtStr = dt * _strength * (_random ? MathUtils.nextRandomFloat() : 1f); p.getPosition().subtract(_line.getOrigin(), _v1); _line.getDirection().cross(_v1, v2); if (v2.length() == 0) { // particle is on the axis return; } v2.normalizeLocal(); if (_type == VT_CYLINDER) { _rot.apply(v2, v2); v2.scaleAdd(dtStr, p.getVelocity(), p.getVelocity()); return; } v2.cross(_line.getDirection(), _v1); _v1.multiplyLocal(_radius); _line.getDirection().scaleAdd(_height, _v1, _v1); _v1.addLocal(_line.getOrigin()); _v1.subtractLocal(p.getPosition()); if (_v1.length() == 0) { // particle is on the ring return; } _v1.normalizeLocal(); _v1.cross(v2, v3); _rot.fromAngleAxis(-_divergence, v2); _rot.apply(v3, v3); v3.scaleAdd(dtStr, p.getVelocity(), p.getVelocity()); }
@Override public void read(final InputCapsule capsule) throws IOException { super.read(capsule); _type = capsule.readInt("type", VT_CYLINDER); _strength = capsule.readDouble("strength", 1.0); _divergence = capsule.readDouble("divergence", 0.0); _axis.set((Line3) capsule.readSavable("axis", new Line3(new Vector3(), new Vector3(Vector3.UNIT_Y)))); _height = capsule.readDouble("height", 0.0); _radius = capsule.readDouble("radius", 1.0); _random = capsule.readBoolean("random", false); _transformWithScene = capsule.readBoolean("transformWithScene", true); }
final Line3 arrowLine = new Line3(_calcVec3A, _calcVec3C.normalize(_calcVec3D)); arrowLine.distanceSquared(_calcVec3A, _calcVec3C); arrowLine.distanceSquared(_calcVec3B, _calcVec3D);
@Override public void apply(final double dt, final Particle p, final int index) { final double dtStr = dt * _strength * (_random ? MathUtils.nextRandomFloat() : 1f); p.getPosition().subtract(_line.getOrigin(), _v1); _line.getDirection().cross(_v1, v2); if (v2.length() == 0) { // particle is on the axis return; } v2.normalizeLocal(); if (_type == VT_CYLINDER) { _rot.apply(v2, v2); v2.scaleAdd(dtStr, p.getVelocity(), p.getVelocity()); return; } v2.cross(_line.getDirection(), _v1); _v1.multiplyLocal(_radius); _line.getDirection().scaleAdd(_height, _v1, _v1); _v1.addLocal(_line.getOrigin()); _v1.subtractLocal(p.getPosition()); if (_v1.length() == 0) { // particle is on the ring return; } _v1.normalizeLocal(); _v1.cross(v2, v3); _rot.fromAngleAxis(-_divergence, v2); _rot.apply(v3, v3); v3.scaleAdd(dtStr, p.getVelocity(), p.getVelocity()); }
@Override public void prepare(final ParticleSystem system) { _line.setOrigin(_axis.getOrigin()); _line.setDirection(_axis.getDirection()); final ReadOnlyMatrix3 mat = system.getEmitterTransform().getMatrix(); if (_transformWithScene && !mat.isIdentity()) { final Vector3 temp = Vector3.fetchTempInstance(); mat.applyPost(_line.getOrigin(), temp); _line.setOrigin(temp); mat.applyPost(_line.getDirection(), temp); _line.setDirection(temp); Vector3.releaseTempInstance(temp); } if (_type == VT_CYLINDER) { _rot.fromAngleAxis(-_divergence, _line.getDirection()); } }
@Override public Line3 clone() { return new Line3(this); }
public BasicVortex(final double strength, final double divergence, final ReadOnlyLine3 axis, final boolean random, final boolean transformWithScene) { _strength = strength; _divergence = divergence; _axis.set(axis); _height = 0f; _radius = 1f; _random = random; _transformWithScene = transformWithScene; }
@Test public void testGetSet() { final Line3 line1 = new Line3(); assertEquals(Vector3.ZERO, line1.getOrigin()); assertEquals(Vector3.UNIT_Z, line1.getDirection()); line1.setOrigin(Vector3.NEG_ONE); line1.setDirection(Vector3.UNIT_X); assertEquals(Vector3.NEG_ONE, line1.getOrigin()); assertEquals(Vector3.UNIT_X, line1.getDirection()); final Line3 line2 = new Line3(line1); assertEquals(Vector3.NEG_ONE, line2.getOrigin()); assertEquals(Vector3.UNIT_X, line2.getDirection()); final Line3 line3 = new Line3(Vector3.ONE, Vector3.UNIT_Y); assertEquals(Vector3.ONE, line3.getOrigin()); assertEquals(Vector3.UNIT_Y, line3.getDirection()); }
/** * @return An instance of Line3 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 Line3 fetchTempInstance() { if (MathConstants.useMathPools) { return LINE3_POOL.fetch(); } else { return new Line3(); } }
public void setAxis(final ReadOnlyLine3 axis) { _axis.set(axis); }