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

sim.app.mav.MavDemo 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.mav;

import sim.engine.*;
import sim.util.*;
import sim.field.continuous.*;

public /*strictfp*/ class MavDemo extends SimState
    {
    private static final long serialVersionUID = 1;

    public Continuous2D ground;
    public Continuous2D mavs;
    
    public double width = 500;
    public double height = 500;
    public double crashDistance = 8;
    public double sensorRangeDistance = 50; 
    public int numMavs = 30;
    
    // shapes on the ground
    public Region[] region = new Region[]
    {
    new Region(0, 1, 50,50),
    new Region(1,  2, 200, 200),
    new Region(2, 3, 200,450)
    };
    
    public MavDemo(long seed)
        {
        super(seed);
        }
    
    public void start()
        {
        super.start();

        // We'll use a Continuous2D field for the ground regions -- but in fact there are only
        // a relatively few ground regions and so when we do hit testing etc. (see surfaceAtPoint(...)),
        // we'll just scan through the region[] array rather than go through the overhead of the
        // field.  Why dump them in the field then?  Simply so we can use a field portrayal.
        // So we make a field portrayal with one big discretization -- so it surely will draw ALL objects
        // objects during every redraw.  This also lets us just set the location of the objects to 0,0,
        // and use the objects' internal shape coordinates for handling their drawing.
        ground = new Continuous2D(width > height ? width : height, width, height);
        for(int i = 0 ; i < region.length; i++)
            ground.setObjectLocation(region[i], new Double2D(region[i].originx, region[i].originy));

        // Use a Continuous2D for the MAVs.  We need to
        // compute a good discretization: such that the width of the buckets
        // is twice the width of the sensors, plus a little bit more for overlap.
        // Since the MAVs are schedulable, we'll load them into the schedule to be
        // fired each time as well.
        mavs = new Continuous2D(sensorRangeDistance * 2, width, height);        
        for(int i = 0 ; i < numMavs; i++)
            {
            // put the mav in a random location and random orientation.  We'll give them
            // some N steps to get away from one another before we start crashing them into each other
            Mav mav = new Mav(4,random.nextDouble()*width,random.nextDouble()*height);
            mavs.setObjectLocation(mav, new Double2D(mav.x,mav.y));
            schedule.scheduleRepeating(mav);
            }
        }
    
    public static void main(String[] args)
        {
        doLoop(MavDemo.class, args);
        System.exit(0);
        }    

    }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy