All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sim.app.particles3d.Particle Maven / Gradle / Ivy

Go to download

MASON is a fast discrete-event multiagent simulation library core in Java, designed to be the foundation for large custom-purpose Java simulations, and also to provide more than enough functionality for many lightweight simulation needs. MASON contains both a model library and an optional suite of visualization tools in 2D and 3D.

The newest version!
/*
  Copyright 2006 by Sean Luke and George Mason University
  Licensed under the Academic Free License version 3.0
  See the file "LICENSE" for more information
*/

package sim.app.particles3d;
import sim.engine.*;
import sim.util.*;

/** A bouncing particle. */

public class Particle implements Steppable
    {
    private static final long serialVersionUID = 1;

    public boolean randomize = false;
    public int xdir;  // -1, 0, or 1
    public int ydir;  // -1, 0, or 1
    public int zdir; 

    IntBag xPos = new IntBag(); 
    IntBag yPos = new IntBag(); 
    IntBag zPos = new IntBag(); 

    public Particle(int xdir, int ydir, int zdir)
        {
        this.xdir = xdir;
        this.ydir = ydir;
        this.zdir = zdir;
        }

    public void step(SimState state)
        {
        Particles3D tut = (Particles3D)state;
        
        Int3D location = tut.particles.getObjectLocation(this); 
        tut.trails.field[location.x][location.y][location.z] = 1.0f; 

        // Randomize my direction if requested
        if (randomize)
            {
            xdir = tut.random.nextInt(3) - 1;
            ydir = tut.random.nextInt(3) - 1;
            zdir = tut.random.nextInt(3) - 1;
            randomize = false;
            }
        
        // move
        int newx = location.x + xdir;
        int newy = location.y + ydir;
        int newz = location.z + zdir;
        
        // reverse course if hitting boundary
        if (newx < 0) { newx++; xdir = -xdir; }
        else if (newx >= tut.particles.getWidth()) {newx--; xdir = -xdir; }
        if (newy < 0) { newy++ ; ydir = -ydir; }
        else if (newy >= tut.particles.getHeight()) {newy--; ydir = -ydir; }
        if (newz < 0) { newz++ ; zdir = -zdir; }
        else if (newz >= tut.particles.getLength()) {newz--; zdir = -zdir; }
        
        // set my new location 
        Int3D newLoc = new Int3D(newx,newy,newz); 
        tut.particles.setObjectLocation(this, newLoc); 

        // randomize everyone at that location if need be
        Bag p = tut.particles.getObjectsAtLocation(newLoc); 
        if (p.numObjs > 1)
            {
            for(int x=0;x




© 2015 - 2025 Weber Informatics LLC | Privacy Policy