Module org.dyn4j

Class WeldJoint

  • All Implemented Interfaces:
    DataContainer, Shiftable

    public class WeldJoint
    extends Joint
    implements Shiftable, DataContainer
    Implementation of a weld joint.

    A weld joint joins two bodies together as if they were a single body with two fixtures. Both their relative linear and angular motion are constrained to keep them attached to each other. The system as a whole can rotate and translate freely.

    Using a frequency greater than zero allows the joint to function as a torsion spring about the anchor point. A good starting point is a frequency of 8.0 and damping ratio of 0.3 then adjust as necessary.

    Since:
    1.0.0
    Version:
    3.2.1
    Author:
    William Bittle
    See Also:
    Documentation, Weld 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
      • referenceAngle

        protected double referenceAngle
        The initial angle between the two Bodys
      • frequency

        protected double frequency
        The oscillation frequency in hz
      • dampingRatio

        protected double dampingRatio
        The damping ratio
    • Constructor Detail

      • WeldJoint

        public WeldJoint​(Body body1,
                         Body body2,
                         Vector2 anchor)
        Minimal constructor.
        Parameters:
        body1 - the first Body
        body2 - the second Body
        anchor - the anchor point in world coordinates
        Throws:
        java.lang.NullPointerException - if body1, body2, or anchor 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)
        Description copied from class: Joint
        Returns the torque applied to the Bodys in order to satisfy the constraint in newton-meters.
        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
      • isSpring

        public boolean isSpring()
        Returns true if this distance joint is a spring distance joint.
        Returns:
        boolean
        Since:
        3.0.1
      • isSpringDamper

        public boolean isSpringDamper()
        Returns true if this distance joint is a spring distance joint with damping.
        Returns:
        boolean
        Since:
        3.0.1
      • getDampingRatio

        public double getDampingRatio()
        Returns the damping ratio.
        Returns:
        double
        Since:
        3.0.1
      • setDampingRatio

        public void setDampingRatio​(double dampingRatio)
        Sets the damping ratio.

        Larger values reduce the oscillation of the spring.

        Parameters:
        dampingRatio - the damping ratio; in the range [0, 1]
        Throws:
        java.lang.IllegalArgumentException - if damping ration is less than zero or greater than 1
        Since:
        3.0.1
      • getFrequency

        public double getFrequency()
        Returns the spring frequency.
        Returns:
        double
        Since:
        3.0.1
      • setFrequency

        public void setFrequency​(double frequency)
        Sets the spring frequency.

        Larger values increase the stiffness of the spring.

        Parameters:
        frequency - the spring frequency in hz; must be greater than or equal to zero
        Throws:
        java.lang.IllegalArgumentException - if frequency is less than zero
        Since:
        3.0.1
      • getReferenceAngle

        public double getReferenceAngle()
        Returns the reference angle.

        The reference angle is the angle calculated when the joint was created from the two joined bodies. The reference angle is the angular difference between the bodies.

        Returns:
        double
        Since:
        3.0.1
      • setReferenceAngle

        public void setReferenceAngle​(double angle)
        Sets the reference angle.

        This method can be used to set the reference angle to override the computed reference angle from the constructor. This is useful in recreating the joint from a current state.

        Parameters:
        angle - the reference angle in radians
        Since:
        3.0.1
        See Also:
        getReferenceAngle()