Operator Reference

dual_quat_interpolateT_dual_quat_interpolateDualQuatInterpolateDualQuatInterpolatedual_quat_interpolate (Operator)

dual_quat_interpolateT_dual_quat_interpolateDualQuatInterpolateDualQuatInterpolatedual_quat_interpolate — Interpolate two dual quaternions.

Signature

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

void DualQuatInterpolate(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

def dual_quat_interpolate(dual_quaternion_start: Sequence[float], dual_quaternion_end: Sequence[float], interp_pos: MaybeSequence[float]) -> Sequence[float]

Description

The operator dual_quat_interpolatedual_quat_interpolateDualQuatInterpolateDualQuatInterpolatedual_quat_interpolate interpolates the two dual quaternions DualQuaternionStartDualQuaternionStartDualQuaternionStartdualQuaternionStartdual_quaternion_start and DualQuaternionEndDualQuaternionEndDualQuaternionEnddualQuaternionEnddual_quaternion_end at the interpolation position InterpPosInterpPosInterpPosinterpPosinterp_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 InterpPosInterpPosInterpPosinterpPosinterp_pos must lie within the interval . However, values outside this interval are also possible, which then correspond to an extrapolation. For InterpPosInterpPosInterpPosinterpPosinterp_pos=0, the interpolated dual quaternion DualQuaternionInterpolatedDualQuaternionInterpolatedDualQuaternionInterpolateddualQuaternionInterpolateddual_quaternion_interpolated corresponds to DualQuaternionStartDualQuaternionStartDualQuaternionStartdualQuaternionStartdual_quaternion_start. For InterpPosInterpPosInterpPosinterpPosinterp_pos=1, the interpolated dual quaternion DualQuaternionInterpolatedDualQuaternionInterpolatedDualQuaternionInterpolateddualQuaternionInterpolateddual_quaternion_interpolated corresponds to DualQuaternionEndDualQuaternionEndDualQuaternionEnddualQuaternionEnddual_quaternion_end.

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

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

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

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

DualQuaternionStartDualQuaternionStartDualQuaternionStartdualQuaternionStartdual_quaternion_start (input_control)  dual_quaternion HDualQuaternion, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Dual quaternion as the start point of the interpolation.

DualQuaternionEndDualQuaternionEndDualQuaternionEnddualQuaternionEnddual_quaternion_end (input_control)  dual_quaternion HDualQuaternion, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Dual quaternion as the end point of the interpolation.

InterpPosInterpPosInterpPosinterpPosinterp_pos (input_control)  real(-array) HTupleMaybeSequence[float]HTupleHtuple (real) (double) (double) (double)

Interpolation parameter.

Default: 0.5

Suggested values: 0.0, 0.25, 0.5, 0.75, 1.0

DualQuaternionInterpolatedDualQuaternionInterpolatedDualQuaternionInterpolateddualQuaternionInterpolateddual_quaternion_interpolated (output_control)  dual_quaternion(-array) HDualQuaternion, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Interpolated dual quaternion.

Possible Predecessors

pose_to_dual_quatpose_to_dual_quatPoseToDualQuatPoseToDualQuatpose_to_dual_quat, screw_to_dual_quatscrew_to_dual_quatScrewToDualQuatScrewToDualQuatscrew_to_dual_quat, dual_quat_normalizedual_quat_normalizeDualQuatNormalizeDualQuatNormalizedual_quat_normalize

Possible Successors

dual_quat_to_hom_mat3ddual_quat_to_hom_mat3dDualQuatToHomMat3dDualQuatToHomMat3ddual_quat_to_hom_mat3d, dual_quat_to_posedual_quat_to_poseDualQuatToPoseDualQuatToPosedual_quat_to_pose, dual_quat_to_screwdual_quat_to_screwDualQuatToScrewDualQuatToScrewdual_quat_to_screw

See also

dual_quat_composedual_quat_composeDualQuatComposeDualQuatComposedual_quat_compose, dual_quat_conjugatedual_quat_conjugateDualQuatConjugateDualQuatConjugatedual_quat_conjugate, serialize_dual_quatserialize_dual_quatSerializeDualQuatSerializeDualQuatserialize_dual_quat, deserialize_dual_quatdeserialize_dual_quatDeserializeDualQuatDeserializeDualQuatdeserialize_dual_quat, dual_quat_trans_line_3ddual_quat_trans_line_3dDualQuatTransLine3dDualQuatTransLine3ddual_quat_trans_line_3d, dual_quat_trans_point_3ddual_quat_trans_point_3dDualQuatTransPoint3dDualQuatTransPoint3ddual_quat_trans_point_3d, quat_interpolatequat_interpolateQuatInterpolateQuatInterpolatequat_interpolate

Module

Foundation