Interface Grid<T>

All Superinterfaces:
Projection<T>
All Known Implementing Classes:
AbstractGrid, ContextFastSingleGrid, ContextGrid, DefaultGrid, FastDenseSingleOccuGrid, Projected3DGrid

public interface Grid<T> extends Projection<T>
Interface for classes implementing grid type projection space.
Author:
Nick Collier
  • Method Details

    • getDimensions

      GridDimensions getDimensions()
      Gets the dimensions of the space.
      Returns:
      the dimensions of the space.
    • setAdder

      void setAdder(GridAdder<T> adder)
      Sets the adder used by this space to add new objects.
      Parameters:
      adder - the adder
    • getAdder

      GridAdder<T> getAdder()
      Gets the adder used by this space to add new objects.
      Returns:
      the adder used by this space to add new objects.
    • moveTo

      boolean moveTo(T object, int... newLocation)
      Moves the specified object from its current location to the new location. The object must previously have been introduced into the space. Objects are introduced into the space by adding them to the context of which this space is a projection.
      Parameters:
      object -
      newLocation -
      Returns:
      true if the move was successful, otherwise false.
      Throws:
      SpatialException - if the object is not already in the space, if the number of dimensions in the location does not agree with the number in the space, or if the object is moved outside the grid dimensions.
    • getLocation

      GridPoint getLocation(Object obj)
      Gets the location of the specified object.
      Parameters:
      obj -
      Returns:
      the location of the specified object or null if the object is not in the space.
    • size

      int size()
      Gets the number of objects currently in the space. This does NOT include any objects that may have been added, but have NOT been moved to a space location.
      Returns:
      the number of objects currently in the space. This does NOT include any objects that may have been added, but have NOT been moved to a space location.
    • getGridPointTranslator

      GridPointTranslator getGridPointTranslator()
      Retrieves the rule being used for controlling what happens at or beyond the borders of the space.
      Returns:
      the rule for handling out of bounds coordinates
    • getCellAccessor

      CellAccessor getCellAccessor()
      Gets the cell accessor used to control access to individual grid cells.
      Returns:
      the cell accessor used to control access to individual grid cells.
    • setGridPointTranslator

      void setGridPointTranslator(GridPointTranslator rule)
      Sets the rule to use for controlling what happens at or beyond the borders of the space.
      Parameters:
      rule - the rule for handling out of bounds coordinates
    • getObjects

      Iterable<T> getObjects()
      Gets all the object currently in the space. This does NOT include any objects that may have been added, but have NOT been moved to a space location.
      Returns:
      an iteratable over all the object currently in the space. This does NOT include any objects that may have been added, but have NOT been moved to a space location.
    • getObjectAt

      T getObjectAt(int... location)
      Gets the object at the specified location.
      Parameters:
      location -
      Returns:
      the object at the specified location.
    • getObjectsAt

      Iterable<T> getObjectsAt(int... location)
      Gets all the objects at the specified location. For a multi occupancy space this will be all the objects at that location. For a single occupancy space this will be the single object at that location.
      Parameters:
      location -
      Returns:
      the object at the specified location.
    • getRandomObjectAt

      T getRandomObjectAt(int... location)
      Gets a random object from among those at the specified location. If this is a single occupancy space this will return the single object at that location, if any.
      Parameters:
      location -
      Returns:
      the object at the specified location.
    • moveByDisplacement

      GridPoint moveByDisplacement(T object, int... displacement)
      Moves the specified object from its current location by the specified amount. For example moveByDisplacement(object, 3, -2, 1) will move the object by 3 along the x-axis, -2 along the y and 1 along the z. The displacement argument can be less than the number of dimensions in the space in which case the remaining argument will be set to 0. For example, moveByDisplacement(object, 3) will move the object 3 along the x-axis and 0 along the y and z axes, assuming a 3D grid.
      Parameters:
      object - the object to move
      displacement - the amount to move the object
      Returns:
      the new location if the move was successful, otherwise null
      Throws:
      SpatialException - if the object is not already in the space or if the number of dimensions in the displacement greater than the number of grid dimensions.
    • moveByVector

      GridPoint moveByVector(T object, double distance, double... anglesInRadians)
      Moves the specified object the specified distance from its current position along the specified angle. For example, moveByVector(object, 1, Direction.NORTH) will move the object 1 unit "north" up the y-axis, assuming a 2D grid. Similarly, grid.moveByVector(object, 2, 0, Math.toRadians(90), 0) will rotate 90 degrees around the y-axis, thus moving the object 2 units along the z-axis. Note that the radians / degrees are incremented in a anti-clockwise fashion, such that 0 degrees is "east", 90 degrees is "north", 180 is "west" and 270 is "south."
      Parameters:
      object - the object to move
      distance - the distance to move
      anglesInRadians - the angle to move along in radians. Note that Math.toRadians(degrees) is useful here
      Returns:
      the new location or null if the move is not successful
      Throws:
      SpatialException - if the object is not already in the space or if the number of angles is greater than the number of dimensions
      See Also:
    • isPeriodic

      boolean isPeriodic()
      True if this grid is peri0dic (in the sense that moving off one border makes you appear on the other one), otherwise false. A 2D periodic grid is a torus. This is defined by the grid's border behavior which is determined by its GridPointTranslator.
      Returns:
      true if this grid is periodic, otherwise false.
    • getDistance

      double getDistance(GridPoint point1, GridPoint point2)
      Returns the distance between the GridPoints point1 and point2, taking into account the space's topology.
      Parameters:
      point1 - the first point
      point2 - the second point
      Returns:
      the distance between the two points
    • getDistanceSq

      double getDistanceSq(GridPoint point1, GridPoint point2)
      Returns the square of the distance between the GridPoints point1 and point2, taking into account the space's topology.
      Parameters:
      point1 - the first point
      point2 - the second point
      Returns:
      the square of the distance between the two points