package org.openpixi.pixi.ui.util.yaml; import java.util.Random; import org.openpixi.pixi.physics.Settings; import org.openpixi.pixi.physics.particles.ParticleFull; public class YamlParticleStream { public YamlParticle particle; public Double dx; public Double dy; public Double randomX; public Double randomY; public Double randomVx; public Double randomVy; public Double randomGaussX; public Double randomGaussY; public Double randomGaussVx; public Double randomGaussVy; public Integer number; private Random random = new Random(); /** * Creates a stream of particles. The particle is copied * 'number' times. Each time, the x- and y-values are * adjusted by adding dx and dy. * @param settings Settings object to which particles are added. */ public void applyTo(Settings settings) { ParticleFull p; double dx = 0; double dy = 0; double number = 0; if (this.dx != null) { dx = this.dx; } if (this.dy != null) { dy = this.dy; } if (this.number != null) { number = this.number; } if (this.particle != null) { p = particle.getParticle(); double x = p.getX(); double y = p.getY(); for (int i = 0; i < number; i++) { p = particle.getParticle(); p.setX(x + i * dx); p.setY(y + i * dy); applyRandomModifications(p); settings.addParticle(p); } } } private void applyRandomModifications(ParticleFull p) { if (this.randomX != null) { p.addX(random.nextDouble() * this.randomX); } if (this.randomY != null) { p.addY(random.nextDouble() * this.randomY); } if (this.randomVx != null) { p.setVx(p.getVx() + random.nextDouble() * this.randomVx); } if (this.randomVy != null) { p.setVy(p.getVy() + random.nextDouble() * this.randomVy); } if (this.randomGaussX != null) { p.addX(random.nextGaussian() * this.randomGaussX); } if (this.randomGaussY != null) { p.addY(random.nextGaussian() * this.randomGaussY); } if (this.randomGaussVx != null) { p.setVx(p.getVx() + random.nextGaussian() * this.randomGaussVx); } if (this.randomGaussVy != null) { p.setVy(p.getVy() + random.nextGaussian() * this.randomGaussVy); } } }