Skip to content

dual_quat_interpolateDualQuatInterpolateDualQuatInterpolatedual_quat_interpolateT_dual_quat_interpolateπŸ”—

Short descriptionπŸ”—

dual_quat_interpolateDualQuatInterpolateDualQuatInterpolatedual_quat_interpolateT_dual_quat_interpolate β€” Interpolate two dual quaternions.

SignatureπŸ”—

dual_quat_interpolate( dual_quaternion DualQuaternionStart, dual_quaternion DualQuaternionEnd, real InterpPos, out dual_quaternion DualQuaternionInterpolated )void DualQuatInterpolate( const HTuple& DualQuaternionStart, const HTuple& DualQuaternionEnd, const HTuple& InterpPos, HTuple* DualQuaternionInterpolated )static void HOperatorSet.DualQuatInterpolate( HTuple dualQuaternionStart, HTuple dualQuaternionEnd, HTuple interpPos, out HTuple dualQuaternionInterpolated )def dual_quat_interpolate( dual_quaternion_start: Sequence[float], dual_quaternion_end: Sequence[float], interp_pos: MaybeSequence[float] ) -> Sequence[float]

Herror T_dual_quat_interpolate( const Htuple DualQuaternionStart, const Htuple DualQuaternionEnd, const Htuple InterpPos, Htuple* DualQuaternionInterpolated )

HDualQuaternionArray HDualQuaternion::DualQuatInterpolate( const HDualQuaternion& DualQuaternionEnd, const HTuple& InterpPos ) const

HDualQuaternion HDualQuaternion::DualQuatInterpolate( const HDualQuaternion& DualQuaternionEnd, double InterpPos ) const

HDualQuaternion[] HDualQuaternion.DualQuatInterpolate( HDualQuaternion dualQuaternionEnd, HTuple interpPos )

HDualQuaternion HDualQuaternion.DualQuatInterpolate( HDualQuaternion dualQuaternionEnd, double interpPos )

DescriptionπŸ”—

The operator dual_quat_interpolateDualQuatInterpolate interpolates the two dual quaternions DualQuaternionStartdualQuaternionStartdual_quaternion_start and DualQuaternionEnddualQuaternionEnddual_quaternion_end at the interpolation position InterpPosinterpPosinterp_pos.

For a brief introduction to dual quaternions, the used notation, and the relationship between dual quaternions and screws, see β€œSolution Guide III-C - 3D Vision”.

For interpolations, the position InterpPosinterpPosinterp_pos must lie within the interval \([0,1]\). However, values outside this interval are also possible, which then correspond to an extrapolation. For \(\textrm{InterpPos}=0\), the interpolated dual quaternion DualQuaternionInterpolateddualQuaternionInterpolateddual_quaternion_interpolated corresponds to DualQuaternionStartdualQuaternionStartdual_quaternion_start. For \(\textrm{InterpPos}=1\), the interpolated dual quaternion DualQuaternionInterpolateddualQuaternionInterpolateddual_quaternion_interpolated corresponds to DualQuaternionEnddualQuaternionEnddual_quaternion_end.

The interpolation is performed by using screw linear interpolation (ScLERP). If both DualQuaternionStartdualQuaternionStartdual_quaternion_start and DualQuaternionEnddualQuaternionEnddual_quaternion_end are unit dual quaternions, DualQuaternionInterpolateddualQuaternionInterpolateddual_quaternion_interpolated will be a unit dual quaternion as well. Hence, dual_quat_interpolateDualQuatInterpolate can be used to smoothly interpolate between two 3D rigid transformations.

Note that the interpolation of the rotation parts of DualQuaternionStartdualQuaternionStartdual_quaternion_start and DualQuaternionEnddualQuaternionEnddual_quaternion_end is performed identically to the interpolation of quaternions, i.e., the screw angle is interpolated linearly (see quat_interpolateQuatInterpolate). The interpolation of the translation part is done by linearly interpolating the screw translation.

It is possible to pass a tuple of values for InterpPosinterpPosinterp_pos. In this case, a tuple of interpolated DualQuaternionInterpolateddualQuaternionInterpolateddual_quaternion_interpolated is returned, one for each value in InterpPosinterpPosinterp_pos. This is more efficient than calling dual_quat_interpolateDualQuatInterpolate multiple times with a single value for InterpPosinterpPosinterp_pos.

Execution informationπŸ”—

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

  • Processed without parallelization.

ParametersπŸ”—

DualQuaternionStartdualQuaternionStartdual_quaternion_start (input_control) dual_quaternion β†’ (real)HTuple (double)HDualQuaternion, HTuple (double)Sequence[float]Htuple (double)

Dual quaternion as the start point of the interpolation.

DualQuaternionEnddualQuaternionEnddual_quaternion_end (input_control) dual_quaternion β†’ (real)HTuple (double)HDualQuaternion, HTuple (double)Sequence[float]Htuple (double)

Dual quaternion as the end point of the interpolation.

InterpPosinterpPosinterp_pos (input_control) real(-array) β†’ (real)HTuple (double)HTuple (double)MaybeSequence[float]Htuple (double)

Interpolation parameter.

Default: 0.50.5
Suggested values: 0.0, 0.25, 0.5, 0.75, 1.00.0, 0.25, 0.5, 0.75, 1.0

DualQuaternionInterpolateddualQuaternionInterpolateddual_quaternion_interpolated (output_control) dual_quaternion(-array) β†’ (real)HTuple (double)HDualQuaternion, HTuple (double)Sequence[float]Htuple (double)

Interpolated dual quaternion.

Combinations with other operatorsπŸ”—

Combinations

Possible predecessors

pose_to_dual_quatPoseToDualQuat, screw_to_dual_quatScrewToDualQuat, dual_quat_normalizeDualQuatNormalize

Possible successors

dual_quat_to_hom_mat3dDualQuatToHomMat3d, dual_quat_to_poseDualQuatToPose, dual_quat_to_screwDualQuatToScrew

See also

dual_quat_composeDualQuatCompose, dual_quat_conjugateDualQuatConjugate, serialize_dual_quatSerializeDualQuat, deserialize_dual_quatDeserializeDualQuat, dual_quat_trans_line_3dDualQuatTransLine3d, dual_quat_trans_point_3dDualQuatTransPoint3d, quat_interpolateQuatInterpolate

ModuleπŸ”—

Foundation