Module org.dyn4j

Class RopeJoint

  • All Implemented Interfaces:
    DataContainer, Shiftable

    public class RopeJoint
    extends Joint
    implements Shiftable, DataContainer
    Implementation a maximum and/or minimum length distance joint.

    A rope joint contains the distance between two bodies. The bodies can rotate freely about the anchor points. The system as a whole can rotate and translate freely as well.

    This joint is like the DistanceJoint, but includes an upper and lower limit and does not include a spring-damper system.

    By default the lower and upper limits are set to the current distance between the given anchor points and will function identically like a DistanceJoint. The upper and lower limits can be enabled separately.

    Since:
    2.2.1
    Version:
    3.2.1
    Author:
    William Bittle
    See Also:
    Documentation, Distance Constraint, Max Distance Constraint
    • Field Detail

      • localAnchor1

        protected Vector2 localAnchor1
        The local anchor point on the first Body
      • localAnchor2

        protected Vector2 localAnchor2
        The local anchor point on the second Body
      • upperLimit

        protected double upperLimit
        The maximum distance between the two world space anchor points
      • lowerLimit

        protected double lowerLimit
        The minimum distance between the two world space anchor points
      • upperLimitEnabled

        protected boolean upperLimitEnabled
        Whether the maximum distance is enabled
      • lowerLimitEnabled

        protected boolean lowerLimitEnabled
        Whether the minimum distance is enabled
    • Constructor Detail

      • RopeJoint

        public RopeJoint​(Body body1,
                         Body body2,
                         Vector2 anchor1,
                         Vector2 anchor2)
        Minimal constructor.

        Creates a rope joint between the two bodies that acts like a distance joint.

        Parameters:
        body1 - the first Body
        body2 - the second Body
        anchor1 - in world coordinates
        anchor2 - in world coordinates
        Throws:
        java.lang.NullPointerException - if body1, body2, anchor1, or anchor2 is null
        java.lang.IllegalArgumentException - if body1 == body2
    • Method Detail

      • toString

        public java.lang.String toString()
        Overrides:
        toString in class Joint
      • initializeConstraints

        public void initializeConstraints​(Step step,
                                          Settings settings)
        Description copied from class: Joint
        Performs any initialization of the velocity and position constraints.
        Specified by:
        initializeConstraints in class Joint
        Parameters:
        step - the time step information
        settings - the current world settings
      • solveVelocityConstraints

        public void solveVelocityConstraints​(Step step,
                                             Settings settings)
        Description copied from class: Joint
        Solves the velocity constraints.
        Specified by:
        solveVelocityConstraints in class Joint
        Parameters:
        step - the time step information
        settings - the current world settings
      • solvePositionConstraints

        public boolean solvePositionConstraints​(Step step,
                                                Settings settings)
        Description copied from class: Joint
        Solves the position constraints.
        Specified by:
        solvePositionConstraints in class Joint
        Parameters:
        step - the time step information
        settings - the current world settings
        Returns:
        boolean true if the position constraints were solved
      • getAnchor1

        public Vector2 getAnchor1()
        Description copied from class: Joint
        Returns the anchor point on the first Body in world coordinates.
        Specified by:
        getAnchor1 in class Joint
        Returns:
        Vector2
      • getAnchor2

        public Vector2 getAnchor2()
        Description copied from class: Joint
        Returns the anchor point on the second Body in world coordinates.
        Specified by:
        getAnchor2 in class Joint
        Returns:
        Vector2
      • getReactionForce

        public Vector2 getReactionForce​(double invdt)
        Description copied from class: Joint
        Returns the force applied to the Bodys in order to satisfy the constraint in newtons.
        Specified by:
        getReactionForce in class Joint
        Parameters:
        invdt - the inverse delta time
        Returns:
        Vector2
      • getReactionTorque

        public double getReactionTorque​(double invdt)
        Returns the torque applied to the Bodys in order to satisfy the constraint in newton-meters.

        Not applicable to this joint. Always returns zero.

        Specified by:
        getReactionTorque in class Joint
        Parameters:
        invdt - the inverse delta time
        Returns:
        double
      • shift

        public void shift​(Vector2 shift)
        Description copied from interface: Shiftable
        Translates the object to match the given coordinate shift.
        Specified by:
        shift in interface Shiftable
        Parameters:
        shift - the amount to shift along the x and y axes
      • getUpperLimit

        public double getUpperLimit()
        Returns the upper limit in meters.
        Returns:
        double
      • setUpperLimit

        public void setUpperLimit​(double upperLimit)
        Sets the upper limit in meters.
        Parameters:
        upperLimit - the upper limit in meters; must be greater than or equal to zero
        Throws:
        java.lang.IllegalArgumentException - if upperLimit is less than zero or less than the current lower limit
      • setUpperLimitEnabled

        public void setUpperLimitEnabled​(boolean flag)
        Sets whether the upper limit is enabled.
        Parameters:
        flag - true if the upper limit should be enabled
      • isUpperLimitEnabled

        public boolean isUpperLimitEnabled()
        Returns true if the upper limit is enabled.
        Returns:
        boolean true if the upper limit is enabled
      • getLowerLimit

        public double getLowerLimit()
        Returns the lower limit in meters.
        Returns:
        double
      • setLowerLimit

        public void setLowerLimit​(double lowerLimit)
        Sets the lower limit in meters.
        Parameters:
        lowerLimit - the lower limit in meters; must be greater than or equal to zero
        Throws:
        java.lang.IllegalArgumentException - if lowerLimit is less than zero or greater than the current upper limit
      • setLowerLimitEnabled

        public void setLowerLimitEnabled​(boolean flag)
        Sets whether the lower limit is enabled.
        Parameters:
        flag - true if the lower limit should be enabled
      • isLowerLimitEnabled

        public boolean isLowerLimitEnabled()
        Returns true if the lower limit is enabled.
        Returns:
        boolean true if the lower limit is enabled
      • setLimits

        public void setLimits​(double lowerLimit,
                              double upperLimit)
        Sets both the lower and upper limits.
        Parameters:
        lowerLimit - the lower limit in meters; must be greater than or equal to zero
        upperLimit - the upper limit in meters; must be greater than or equal to zero
        Throws:
        java.lang.IllegalArgumentException - if lowerLimit is less than zero, upperLimit is less than zero, or lowerLimit is greater than upperLimit
      • setLimitsEnabled

        public void setLimitsEnabled​(double lowerLimit,
                                     double upperLimit)
        Sets both the lower and upper limits and enables both.
        Parameters:
        lowerLimit - the lower limit in meters; must be greater than or equal to zero
        upperLimit - the upper limit in meters; must be greater than or equal to zero
        Throws:
        java.lang.IllegalArgumentException - if lowerLimit is less than zero, upperLimit is less than zero, or lowerLimit is greater than upperLimit
      • setLimitsEnabled

        public void setLimitsEnabled​(boolean flag)
        Enables or disables both the lower and upper limits.
        Parameters:
        flag - true if both limits should be enabled
        Since:
        2.2.2
      • setLimits

        public void setLimits​(double limit)
        Sets both the lower and upper limits to the given limit.

        This makes the joint a fixed length joint.

        Parameters:
        limit - the desired limit
        Throws:
        java.lang.IllegalArgumentException - if limit is less than zero
        Since:
        2.2.2
      • setLimitsEnabled

        public void setLimitsEnabled​(double limit)
        Sets both the lower and upper limits to the given limit and enables both.

        This makes the joint a fixed length joint.

        Parameters:
        limit - the desired limit
        Throws:
        java.lang.IllegalArgumentException - if limit is less than zero
        Since:
        2.2.2
      • getLimitState

        public LimitState getLimitState()
        Returns the current state of the limit.
        Returns:
        LimitState
        Since:
        3.2.0