Class DirectPositionBasedSolverForStiffRods

Class Documentation

class DirectPositionBasedSolverForStiffRods

Public Static Functions

static bool init_DirectPositionBasedSolverForStiffRodsConstraint(std::vector<RodConstraint*> &rodConstraints, std::vector<RodSegment*> &rodSegments, Interval *&intervals, int &numberOfIntervals, std::list<Node*> *&forward, std::list<Node*> *&backward, Node *&root, const std::vector<Vector3r> &constraintPositions, const std::vector<Real> &averageRadii, const std::vector<Real> &youngsModuli, const std::vector<Real> &torsionModuli, std::vector<Vector6r> &RHS, std::vector<Vector6r> &lambdaSums, std::vector<std::vector<Matrix3r>> &bendingAndTorsionJacobians, std::vector<Vector3r> &corr_x, std::vector<Quaternionr> &corr_q)

** Initialize the zero-stretch, bending, and torsion constraints of the rod.

static bool update_DirectPositionBasedSolverForStiffRodsConstraint(const std::vector<RodConstraint*> &rodConstraints, const std::vector<RodSegment*> &rodSegments)

** Update the constraint info data.

static bool initBeforeProjection_DirectPositionBasedSolverForStiffRodsConstraint(const std::vector<RodConstraint*> &rodConstraints, const Real inverseTimeStepSize, std::vector<Vector6r> &lambdaSums)

** Initialize the constraint before the projection iterations in each time step.

static bool solve_DirectPositionBasedSolverForStiffRodsConstraint(const std::vector<RodConstraint*> &rodConstraints, std::vector<RodSegment*> &rodSegments, const Interval *intervals, const int &numberOfIntervals, std::list<Node*> *forward, std::list<Node*> *backward, std::vector<Vector6r> &RHS, std::vector<Vector6r> &lambdaSums, std::vector<std::vector<Matrix3r>> &bendingAndTorsionJacobians, std::vector<Vector3r> &corr_x, std::vector<Quaternionr> &corr_q)

** Determine the position and orientation corrections for all combined zero-stretch, bending and twisting constraints of the rod (eq. 22 in the paper).

static bool init_StretchBendingTwistingConstraint(const Vector3r &x0, const Quaternionr &q0, const Vector3r &x1, const Quaternionr &q1, const Vector3r &constraintPosition, const Real averageRadius, const Real averageSegmentLength, const Real youngsModulus, const Real torsionModulus, Eigen::Matrix<Real, 3, 4, Eigen::DontAlign> &jointInfo, Vector3r &stiffnessCoefficientK, Vector3r &restDarbouxVector)

** Initialize the zero-stretch, bending, and torsion constraint.

static bool initBeforeProjection_StretchBendingTwistingConstraint(const Vector3r &stiffnessCoefficientK, const Real inverseTimeStepSize, const Real averageSegmentLength, Vector3r &stretchCompliance, Vector3r &bendingAndTorsionCompliance, Vector6r &lambdaSum)

** Initialize the constraint before the projection iterations in each time step.

static bool update_StretchBendingTwistingConstraint(const Vector3r &x0, const Quaternionr &q0, const Vector3r &x1, const Quaternionr &q1, Eigen::Matrix<Real, 3, 4, Eigen::DontAlign> &jointInfo)

** Update the joint info data.

static bool solve_StretchBendingTwistingConstraint(const Real invMass0, const Vector3r &x0, const Matrix3r &inertiaInverseW0, const Quaternionr &q0, const Real invMass1, const Vector3r &x1, const Matrix3r &inertiaInverseW1, const Quaternionr &q1, const Vector3r &restDarbouxVector, const Real averageSegmentLength, const Vector3r &stretchCompliance, const Vector3r &bendingAndTorsionCompliance, const Eigen::Matrix<Real, 3, 4, Eigen::DontAlign> &jointInfo, Vector3r &corr_x0, Quaternionr &corr_q0, Vector3r &corr_x1, Quaternionr &corr_q1, Vector6r &lambdaSum)

** Determine the position and orientation corrections for the combined zero-stretch, bending and twisting constraint (eq. 23 in the paper).