# Module: tfg.geometry.transformation.dual_quaternion

This module implements TensorFlow dual quaternion utility functions.

A dual quaternion is an extension of a quaternion with the real and dual parts and written as $$q = q_r + epsilon q_d$$, where $$epsilon$$ is the dual number with the property $$e^2 = 0$$. It can thus be represented as two quaternions, and thus stored as 8 numbers. We define the operations in terms of the two quaternions $$q_r$$ and $$q_d$$, which are stored as 8-dimensional tensor.

Dual quaternions are extensions of quaternions to represent rigid transformations (rotations and translations). They are in particular important for deforming geometries as linear blending is a very close approximation of closest path blending, which is not the case for any other representation.

## Functions

conjugate(...): Computes the conjugate of a dual quaternion.

conjugate_dual(...): Computes the conjugate (of dual numbers) in a dual quaternion.

from_axis_angle_translation(...): Converts an axis-angle rotation and translation to a dual quaternion.

from_rotation_translation(...): Converts a rotation matrix and translation vector to a dual quaternion.

inverse(...): Computes the inverse of a dual quaternion.

is_normalized(...): Determines if a dual quaternion is normalized or not.

multiply(...): Multiplies two dual quaternions.

norm(...): Computes the norm, which is in general a dual number.

point_to_dual_quaternion(...): Converts a 3D point to its dual quaternion representation.

to_rotation_translation(...): Converts a dual quaternion into a quaternion for rotation and translation.

[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"Missing the information I need" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"Too complicated / too many steps" },{ "type": "thumb-down", "id": "outOfDate", "label":"Out of date" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"Samples / code issue" },{ "type": "thumb-down", "id": "otherDown", "label":"Other" }]
[{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Easy to understand" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Solved my problem" },{ "type": "thumb-up", "id": "otherUp", "label":"Other" }]