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

📄 dataobject.java

📁 利用JAVA实现的利用进化算法对人口增长进行仿真的源码
💻 JAVA
字号:
/*
 * DataObject.java
 *
 * Created on 14 October 2006, 10:19
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package wpc.data;
import java.awt.Graphics;
import java.awt.Color;
/**
 *
 * @author craig
 */
public abstract class DataObject {
int startX, startY, endX, endY;
Color color;
wpc.MainFrame mainFrame;
DataObject[] data;
    /** Creates a new instance of DataObject */
    public DataObject(wpc.MainFrame mainFrame) {
        this.mainFrame = mainFrame;        
    }
    
    abstract public void createData(int number);
      
    abstract public void draw(Graphics g);
           
    public void setData(DataObject[] data){
        this.data = data;
    }
    
    public void splitWorld(){
        /* Rules for splitting:
         * Spliting all space by:
         *      1:  all space
         *      2:  1 = 0.0x,0.0y  -   0.5x, 1.0y
         *          2 = 0.5x,0.0y  -   1.0x, 1.0y
         *      3:  1 = 0.0x,0.5y  -   0.5x, 1
         *          2 =
         *          3 = 
         *      4:  
         *
         */
       if(data!=null){/*

       /*  Steps to split the world!
        *  1:  Calculate the number of levels.
        *       Using dataobject.length+1, Square root this, and then the number 
        *       of levels is the floor of this.
        *
        *  2:  Calculate the number of splits per level
        *       Using the celing of remainingObjects/remainingLevels
        *
        *  3:  Calculate the Y position of the objects
        *       LevelSpaceY = EndY/numberOfLevels;
        *       startY = levelSpaceY*(remaingingLevels-1);
        *       EndY = levelSpaceY*(remaingLevels)
        *
        *  4: Calculate the X position of the objects
        *       LevelSpaceX = EndX/numberOfObjectsThisLevel;
        *       Using startX =  LevelSpaceX*n
        *             endX = LevelSpaceX*(n+1)
        *       
        *       
        *
        *
        */       
       //Calculate number of levels
       int numberOfObjects = data.length;
       int remainingObjects = numberOfObjects;
       int currentObject = 0;
       int numberOfLevels = (int)Math.floor(Math.sqrt(numberOfObjects));
       int remainingLevels = numberOfLevels;
       int numberOfObjectsThisLevel;
       int levelSpaceY;
       int levelSpaceX;
       for(int i = 0; i < numberOfLevels; i++){
           //Calculate number of splits in this level
           numberOfObjectsThisLevel = (int)Math.ceil(remainingObjects/remainingLevels);
           levelSpaceY = endY/numberOfLevels;
           levelSpaceX = endX/numberOfObjectsThisLevel;
           for(int n = 0; n < numberOfObjectsThisLevel; n++){
               //Devide the space between each split
              if(currentObject<=data.length){
                try{  
                    data[currentObject].setYPOS(levelSpaceY*(remainingLevels-1), levelSpaceY*remainingLevels);
                    data[currentObject].setXPOS(levelSpaceX*n, levelSpaceX*(n+1));
                    //Recersive call here:
                    data[currentObject].splitWorld();
                }catch(java.lang.ArrayIndexOutOfBoundsException e){
                    System.out.println("Error");
                }
              }
               currentObject++;
               remainingObjects--;
               
           }
           remainingLevels--;
       }
       
       
       }
    }
    

    
    
    //SETTERS
    public void setXPOS(int startX, int endX){
        this.startX = startX;
        this.endX = endX;
    }
    
    public void setYPOS(int startY, int endY){
        this.startY = startY;
        this.endY = endY;
    }
    
    public void setColour(Color color){
        this.color = color;
    }
    
    //GETTERS
    
    public int getStartX(){
        return startX;
    }
    
    public int getStartY(){
        return startY;
    }
    
    public int getEndX(){
        return endX;
    }
    
    public int getEndY(){
        return endY;
    }
  
            
    public void calcYear(){
        if(data!=null){
            for(int i = 0; i<data.length; i++){
                data[i].calcYear();
            }
        }
    }
    
}

⌨️ 快捷键说明

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