Class AbstractContinuousSpace<T,​U>

    • Constructor Detail

      • AbstractContinuousSpace

        public AbstractContinuousSpace​(String name,
                                       ContinuousAdder<T> adder,
                                       PointTranslator translator,
                                       CoordinateAccessor<T,​U> accessor,
                                       double... size)
        Constructs this space with the specified name, adder, translator, accessor and size. The size is the size of the space meaning [3, 3] is a 3x3 space.
        Parameters:
        name - the name of the space
        size - the dimensions of the space
      • AbstractContinuousSpace

        public AbstractContinuousSpace​(String name,
                                       ContinuousAdder<T> adder,
                                       PointTranslator translator,
                                       CoordinateAccessor<T,​U> accessor,
                                       double[] size,
                                       double[] origin)
        Constructs this space with the specified name, adder, translator, accessor and size. The size is the size of the space meaning [3, 3] is a 3x3 space.
        Parameters:
        name - the name of the space
        size - the dimensions of the space
        origin - the origin of the space
    • Method Detail

      • createLocationStorage

        protected abstract U createLocationStorage()
      • moveTo

        public boolean moveTo​(T object,
                              double... newLocation)
        Moves the specified object from its current location into 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.
        Specified by:
        moveTo in interface ContinuousSpace<T>
        Parameters:
        object -
        newLocation -
        Returns:
        true if the move was successful, otherwise false.
        Throws:
        SpatialException - if the object is not already in the space or if the number of dimensions in the location does not agree with the number in the space.
      • doMove

        protected boolean doMove​(T object,
                                 double[] displacement,
                                 double[] newLocation)
      • getLocation

        public NdPoint getLocation​(Object obj)
        Gets the location of the specified object.
        Specified by:
        getLocation in interface ContinuousSpace<T>
        Parameters:
        obj -
        Returns:
        the location of the specified object or null if the object is not in the space.
      • size

        public 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.
        Specified by:
        size in interface ContinuousSpace<T>
        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.
      • getPointTranslator

        public PointTranslator getPointTranslator()
        Retrieves the rule being used for controlling what happens at or beyond the borders of the space.
        Specified by:
        getPointTranslator in interface ContinuousSpace<T>
        Returns:
        the rule for handling out of bounds coordinates
      • setPointTranslator

        public void setPointTranslator​(PointTranslator rule)
        Sets the rule to use for controlling what happens at or beyond the borders of the space.
        Specified by:
        setPointTranslator in interface ContinuousSpace<T>
        Parameters:
        rule - the rule for handling out of bounds coordinates
      • getObjects

        public 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.
        Specified by:
        getObjects in interface ContinuousSpace<T>
        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

        public T getObjectAt​(double... location)
        Gets the object at the specified location.
        Specified by:
        getObjectAt in interface ContinuousSpace<T>
        Parameters:
        location -
        Returns:
        the object at the specified location.
      • getObjectsAt

        public Iterable<T> getObjectsAt​(double... 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.
        Specified by:
        getObjectsAt in interface ContinuousSpace<T>
        Parameters:
        location -
        Returns:
        the object at the specified location.
      • getLocation

        protected double[] getLocation​(double... location)
      • getRandomObjectAt

        public T getRandomObjectAt​(double... 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.
        Specified by:
        getRandomObjectAt in interface ContinuousSpace<T>
        Parameters:
        location -
        Returns:
        the object at the specified location.
      • moveByDisplacement

        public NdPoint moveByDisplacement​(T object,
                                          double... 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.
        Specified by:
        moveByDisplacement in interface ContinuousSpace<T>
        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

        public NdPoint moveByVector​(T object,
                                    double distance,
                                    double... anglesInRadians)
        Moves the specifed object the specified distance from its current position along the specified angle.
        Specified by:
        moveByVector in interface ContinuousSpace<T>
        Parameters:
        object - the object to move
        distance - the distance to move
        anglesInRadians - the angle to move along
        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:
        Direction.EAST, Direction.NORTH, Direction.SOUTH, Direction.WEST
      • setAdder

        public void setAdder​(ContinuousAdder<T> adder)
        Sets the adder used by this space to add new objects.
        Specified by:
        setAdder in interface ContinuousSpace<T>
        Parameters:
        adder - the adder
      • getAdder

        public ContinuousAdder<T> getAdder()
        Gets the adder used by this space to add new objects.
        Specified by:
        getAdder in interface ContinuousSpace<T>
        Returns:
        the adder used by this space to add new objects.
      • removeAll

        protected void removeAll()
      • remove

        protected void remove​(T t)
      • isPeriodic

        public boolean isPeriodic()
        Description copied from interface: ContinuousSpace
        True if this space is periodic (in the sense that moving off one border makes you appear on the other one), otherwise false.
        Specified by:
        isPeriodic in interface ContinuousSpace<T>
        Returns:
        true if this space is periodic, otherwise false.
      • evaluate

        public boolean evaluate​(ProjectionPredicate predicate)
        Evaluate this Projection against the specified Predicate. This typically involves a double dispatch where the Projection calls back to the predicate, passing itself.
        Specified by:
        evaluate in interface Projection<T>
        Overrides:
        evaluate in class DefaultProjection<T>
        Parameters:
        predicate -
        Returns:
        true if the predicate evaluates to true, otherwise false. False can also mean that the predicate is not applicable to this Projection. For example, a linked type predicate evaluated against a grid projection.
      • getDistance

        public double getDistance​(NdPoint point1,
                                  NdPoint point2)
        Calculates the euclidian distance between the NdPoints point1 and point2. If the points do not have the same dimension then this returns Double.NaN
        Specified by:
        getDistance in interface ContinuousSpace<T>
        Parameters:
        point1 - the first point
        point2 - the second point
        Returns:
        the euclidian distance between the NdPoints point1 and point2. If the points do not have the same dimension then this returns Double.NaN
      • getDistanceSq

        public double getDistanceSq​(NdPoint point1,
                                    NdPoint point2)
        Calculates the square of the euclidian distance between the NdPoints point1 and point2. If the points do not have the same dimension then this returns Double.NaN
        Specified by:
        getDistanceSq in interface ContinuousSpace<T>
        Parameters:
        point1 - the first point
        point2 - the second point
        Returns:
        the square of the euclidian distance between the NdPoints point1 and point2. If the points do not have the same dimension then this returns Double.NaN
      • getDisplacement

        public double[] getDisplacement​(NdPoint point1,
                                        NdPoint point2)
        Returns the displacement between the NdPoints point1 and point2. If the points do not have the same dimension then this returns null
        Specified by:
        getDisplacement in interface ContinuousSpace<T>
        Parameters:
        point1 - the first point
        point2 - the second point
        Returns:
        the displacement between the NdPoints point1 and point2. If the points do not have the same dimension then this returns null