net.lenkaspace.creeper.model
Class CRBinWorld

java.lang.Object
  extended by net.lenkaspace.creeper.model.CRBaseModel
      extended by net.lenkaspace.creeper.model.CRWorld
          extended by net.lenkaspace.creeper.model.CRBinWorld

public class CRBinWorld
extends CRWorld

Subclass of CRWorld that holds CRSituatedModels in a grid of bins. Contains methods that enable accessing only a subgroup of objects belonging to a single bin instead of all existing CRSituatedModels. This is useful e.g. for optimizing collision detection execution time when the world contains a lot of objects. As an example of where this can be used, see https://lenkaspace.net/lab/swarmSystems/controllingAntConstruction

Version:
2.0
Author:
Lenka Pitonakova contact@lenkaspace.net

Field Summary
 
Fields inherited from class net.lenkaspace.creeper.model.CRBaseModel
childModels, id
 
Constructor Summary
CRBinWorld(CRVector3d binSize_, int id_, CRVector3d size_, CRController controller_)
          Constructor
 
Method Summary
 void addSituatedModel(CRBaseSituatedModel situatedModel_)
          Add a CRBaseSituatedModel to the list of situatedModels.
 void clearChildren()
          Clear all arrays that store any child objects.
 int getBinIndexForBinCoordinates(CRVector3d binCoordinates_)
          Get index of a bin based on its bin coordinates
 int getBinIndexForPosition(CRVector3d position_)
          Get index of a bin based on a position
 java.util.ArrayList<CRBaseSituatedModel> getRelevantObjectsAroundPosition(CRVector3d position_, double radius_)
          Get all CRBaseSituatedModels that are in a bin around a position.
 java.util.ArrayList<CRBaseSituatedModel> getRelevantObjectsObject(CRBaseSituatedModel object_)
          Get all CRBaseSituatedModels that are in a bin around an object.
 void sortObjectToABin(CRBaseSituatedModel dynamicModel_)
          Place an object to a bin based on its position.
 
Methods inherited from class net.lenkaspace.creeper.model.CRWorld
addDynamicModel, getController, getDynamicModels, getHasScenarios, getScenarios, getScenariosAsArray, getSituatedModels, getSize, isBorderless, removeDynamicModel, removeSituatedModel, setBorderless, setDynamicModels, setSituatedModels, setSize, update
 
Methods inherited from class net.lenkaspace.creeper.model.CRBaseModel
addChildModel, getId, getIsRemoved, onRunEnd, onRunStart, onTrialEnd, onTrialStart, removeChildModel, setId, setIsRemoved
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CRBinWorld

public CRBinWorld(CRVector3d binSize_,
                  int id_,
                  CRVector3d size_,
                  CRController controller_)
Constructor

Parameters:
binSize_ - CRVector3d [width, height, depth] dimensions of a single bin
id_ - int nt unique id
size_ - CRVector3d size [width, height, depth]
controller_ - CRController holding controller instance
Method Detail

sortObjectToABin

public void sortObjectToABin(CRBaseSituatedModel dynamicModel_)
Place an object to a bin based on its position. This method should be called for all subclasses of CRBaseSituatedModel immediately after they have changed position.

Parameters:
dynamicModel_ - CRBaseSituatedModel situated model

addSituatedModel

public void addSituatedModel(CRBaseSituatedModel situatedModel_)
Add a CRBaseSituatedModel to the list of situatedModels. Sets world pointer of the situatedModel to this.

Overrides:
addSituatedModel in class CRWorld
Parameters:
situatedModel_ - CRBaseSituatedModel to add

clearChildren

public void clearChildren()
Clear all arrays that store any child objects. Subclasses should override this to implement clearing of any additional arrays

Overrides:
clearChildren in class CRWorld

getBinIndexForPosition

public int getBinIndexForPosition(CRVector3d position_)
Get index of a bin based on a position

Parameters:
position_ - CRVector3d position
Returns:
int index of a bin

getBinIndexForBinCoordinates

public int getBinIndexForBinCoordinates(CRVector3d binCoordinates_)
Get index of a bin based on its bin coordinates

Parameters:
binCoordinates_ - CRVector3d bin coordinates in form [column, row ,0]
Returns:
int index of a bin

getRelevantObjectsObject

public java.util.ArrayList<CRBaseSituatedModel> getRelevantObjectsObject(CRBaseSituatedModel object_)
Get all CRBaseSituatedModels that are in a bin around an object. It is possible that all objects from neighbouring bins will be included if object is near intersection of bins.

Parameters:
object_ - CRBaseSituatedModel object
Returns:
ArrayList list of objects from applicable bins

getRelevantObjectsAroundPosition

public java.util.ArrayList<CRBaseSituatedModel> getRelevantObjectsAroundPosition(CRVector3d position_,
                                                                                 double radius_)
Get all CRBaseSituatedModels that are in a bin around a position. It is possible that all objects from neighbouring bins will be included if circle around a position reaches to those bins.

Parameters:
position_ - CRVector3d position
radius_ - int radius around a position for testing if other bins should be included
Returns:
ArrayList list of objects from applicable bins