⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 woimsdemo3d.java

📁 MASON代表多主体邻里或网络仿真(Multi-Agent Simulator of Neighborhoods or Networks)。它是乔治梅森大学用Java开发的离散事件多主体仿真核心库
💻 JAVA
字号:
package sim.app.woims3d;import sim.field.continuous.*;import sim.engine.*;import sim.display3d.*;import sim.util.*;import ec.util.*;import javax.swing.*;import java.io.*;public class WoimsDemo3D extends SimState    {    public static final double XMIN = 0;    public static final double XMAX = 200;    public static final double YMIN = 0;    public static final double YMAX = 200;    public static final double ZMIN = 0;    public static final double ZMAX = 200;        public static final double DIAMETER = 1;    public static final double[][] obstInfo = { {40, 40, 40, 40}, {60, 135, 135, 135} };    public static final int NUM_WOIMS = 40;    public static final double TIMESTEP = 30;    public Display3D display;    public JFrame displayFrame;    public Continuous3D environment = new Continuous3D( 2*DIAMETER, XMAX-XMIN, YMAX-YMIN, ZMAX-ZMIN );    public Continuous3D woimEnvironment = null;    public Continuous3D obstacles = null;    public WoimsDemo3D(long seed)        {        super(new MersenneTwisterFast(seed), new Schedule(2));        }    public final static double EXTRA_SPACE = 10;    public void setObjectLocation( final Woim3D woim, Double3D location )        {        // toroidal world!        double x = location.x;        while( x < XMIN - EXTRA_SPACE )            x += XMAX-XMIN+EXTRA_SPACE+EXTRA_SPACE;        while( x > XMAX + EXTRA_SPACE )            x -= XMAX-XMIN+EXTRA_SPACE+EXTRA_SPACE;        double y = location.y;        while( y < YMIN - EXTRA_SPACE )            y += YMAX-YMIN+EXTRA_SPACE+EXTRA_SPACE;        while( y > YMAX + EXTRA_SPACE )            y -= YMAX-YMIN+EXTRA_SPACE+EXTRA_SPACE;        double z = location.z;        while( z < ZMIN - EXTRA_SPACE )            z += ZMAX-ZMIN+EXTRA_SPACE+EXTRA_SPACE;        while( z > ZMAX + EXTRA_SPACE )            z -= ZMAX-ZMIN+EXTRA_SPACE+EXTRA_SPACE;        location = new Double3D( x, y, z );        environment.setObjectLocation( woim, location );        woimEnvironment.setObjectLocation( woim, location );        woim.x = location.x;        woim.y = location.y;        woim.z = location.z;        }    public void start()        {        super.start();  // clear out the schedule        environment = new Continuous3D( 2*DIAMETER, XMAX-XMIN, YMAX-YMIN, ZMAX-ZMIN );        woimEnvironment = new Continuous3D( Woim3D.MAX_DISTANCE,XMAX-XMIN, YMAX-YMIN, ZMAX-ZMIN );        obstacles = new Continuous3D( Math.max(XMAX-XMIN,Math.max(YMAX-YMIN,ZMAX-ZMIN)),XMAX-XMIN, YMAX-YMIN, ZMAX-ZMIN );        // Schedule the Woims -- we could instead use a RandomSequence, which would be faster,        // but this is a good test of the scheduler        for(int x=0;x<NUM_WOIMS;x++)            {            Double3D loc = null;            Woim3D woim = null;            int caz = random.nextInt(6);            switch( caz )                {                case 0: loc = new Double3D( XMIN-EXTRA_SPACE,                                            random.nextDouble()*(YMAX-YMIN-DIAMETER)+YMIN+DIAMETER/2,                                            random.nextDouble()*(ZMAX-ZMIN-DIAMETER)+ZMIN+DIAMETER/2 );                    break;                case 1: loc = new Double3D( XMAX+EXTRA_SPACE,                                            random.nextDouble()*(YMAX-YMIN-DIAMETER)+YMIN+DIAMETER/2,                                            random.nextDouble()*(ZMAX-ZMIN-DIAMETER)+ZMIN+DIAMETER/2 );                    break;                case 2: loc = new Double3D( random.nextDouble()*(XMAX-XMIN-DIAMETER)+XMIN+DIAMETER/2,                                            YMIN-EXTRA_SPACE,                                            random.nextDouble()*(ZMAX-ZMIN-DIAMETER)+ZMIN+DIAMETER/2 );                    break;                case 3: loc = new Double3D( random.nextDouble()*(XMAX-XMIN-DIAMETER)+XMIN+DIAMETER/2,                                            YMAX+EXTRA_SPACE,                                            random.nextDouble()*(ZMAX-ZMIN-DIAMETER)+ZMIN+DIAMETER/2 );                    break;                case 4: loc = new Double3D( random.nextDouble()*(XMAX-XMIN-DIAMETER)+XMIN+DIAMETER/2,                                            random.nextDouble()*(YMAX-YMIN-DIAMETER)+YMIN+DIAMETER/2,                                            ZMIN-EXTRA_SPACE );                    break;                case 5: loc = new Double3D( random.nextDouble()*(XMAX-XMIN-DIAMETER)+XMIN+DIAMETER/2,                                            random.nextDouble()*(YMAX-YMIN-DIAMETER)+YMIN+DIAMETER/2,                                            ZMAX+EXTRA_SPACE );                    break;                }            woim = new Woim3D();            environment.setObjectLocation( woim, loc );            woimEnvironment.setObjectLocation( woim, loc );            woim.x = loc.x;            woim.y = loc.y;            woim.z = loc.z;            schedule.scheduleRepeating(woim);            }        for( int i = 0 ; i < obstInfo.length ; i++ )            {            environment.setObjectLocation(new Obstacle3D(obstInfo[i][0]),                                          new Double3D(obstInfo[i][1],obstInfo[i][2],obstInfo[i][3]));            }        }        public static void main(String[] args)        {        doLoop(WoimsDemo3D.class, args);        System.exit(0);        }        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -