Skip to content

projective_trans_hom_point_3dProjectiveTransHomPoint3dProjectiveTransHomPoint3dprojective_trans_hom_point_3dT_projective_trans_hom_point_3d🔗

Short description🔗

projective_trans_hom_point_3dProjectiveTransHomPoint3dProjectiveTransHomPoint3dprojective_trans_hom_point_3dT_projective_trans_hom_point_3d — Project a homogeneous 3D point using a projective transformation matrix.

Signature🔗

projective_trans_hom_point_3d( hom_mat3d HomMat3D, number Px, number Py, number Pz, number Pw, out number Qx, out number Qy, out number Qz, out number Qw )void ProjectiveTransHomPoint3d( const HTuple& HomMat3D, const HTuple& Px, const HTuple& Py, const HTuple& Pz, const HTuple& Pw, HTuple* Qx, HTuple* Qy, HTuple* Qz, HTuple* Qw )static void HOperatorSet.ProjectiveTransHomPoint3d( HTuple homMat3D, HTuple px, HTuple py, HTuple pz, HTuple pw, out HTuple qx, out HTuple qy, out HTuple qz, out HTuple qw )def projective_trans_hom_point_3d( hom_mat_3d: Sequence[float], px: MaybeSequence[Union[float, int]], py: MaybeSequence[Union[float, int]], pz: MaybeSequence[Union[float, int]], pw: MaybeSequence[Union[float, int]] ) -> Tuple[Sequence[float], Sequence[float], Sequence[float], Sequence[float]]

def projective_trans_hom_point_3d_s( hom_mat_3d: Sequence[float], px: MaybeSequence[Union[float, int]], py: MaybeSequence[Union[float, int]], pz: MaybeSequence[Union[float, int]], pw: MaybeSequence[Union[float, int]] ) -> Tuple[float, float, float, float]Herror T_projective_trans_hom_point_3d( const Htuple HomMat3D, const Htuple Px, const Htuple Py, const Htuple Pz, const Htuple Pw, Htuple* Qx, Htuple* Qy, Htuple* Qz, Htuple* Qw )

HTuple HHomMat3D::ProjectiveTransHomPoint3d( const HTuple& Px, const HTuple& Py, const HTuple& Pz, const HTuple& Pw, HTuple* Qy, HTuple* Qz, HTuple* Qw ) const

double HHomMat3D::ProjectiveTransHomPoint3d( double Px, double Py, double Pz, double Pw, double* Qy, double* Qz, double* Qw ) const

HTuple HHomMat3D.ProjectiveTransHomPoint3d( HTuple px, HTuple py, HTuple pz, HTuple pw, out HTuple qy, out HTuple qz, out HTuple qw )

double HHomMat3D.ProjectiveTransHomPoint3d( double px, double py, double pz, double pw, out double qy, out double qz, out double qw )

Description🔗

projective_trans_hom_point_3dProjectiveTransHomPoint3d applies the homogeneous projective transformation matrix HomMat3DhomMat3Dhom_mat_3d to all homogeneous input points (Pxpxpx,Pypypy,Pzpzpz,Pwpwpw) and returns an array of homogeneous output points (Qxqxqx,Qyqyqy,Qzqzqz,Qwqwqw). The transformation is described by the homogeneous transformation matrix given in HomMat3DhomMat3Dhom_mat_3d. This corresponds to the following equation (input and output points as homogeneous vectors):

\[\begin{eqnarray*} \left( \begin{array}{c} \textrm{Qx} \\ \textrm{Qy} \\ \textrm{Qz} \\ \textrm{Qw} \end{array} \right) = \textrm{HomMat3D} \cdot \left( \begin{array}{c} \textrm{Px} \\ \textrm{Py} \\ \textrm{Pz} \\ \textrm{Pw} \end{array} \right) \end{eqnarray*}\]

To transform the homogeneous coordinates to Euclidean coordinates, they must be divided by Qwqwqw:

\[\begin{eqnarray*} \left( \begin{array}{c} Ex \\ Ey \\ Ez \end{array} \right) = \left( \begin{array}{c} \frac{Qx}{Qw} \\ \frac{Qy}{Qw} \\ \frac{Qz}{Qw} \end{array} \right) \end{eqnarray*}\]

This can be achieved directly by calling projective_trans_point_3dProjectiveTransPoint3d. Thus, projective_trans_hom_point_3dProjectiveTransHomPoint3d is primarily useful for transforming points or point sets for which the resulting points might lie in the plane at infinity, i.e., points that potentially have \(\textrm{Qw} = 0\), for which the above division cannot be performed.

Execution information🔗

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

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

  • Automatically parallelized on internal data level.

Parameters🔗

HomMat3DhomMat3Dhom_mat_3d (input_control) hom_mat3d → (real)HTuple (double)HHomMat3D, HTuple (double)Sequence[float]Htuple (double)

Homogeneous projective transformation matrix.

Pxpxpx (input_control) number(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[float, int]]Htuple (double / Hlong)

Input point (x coordinate).

Pypypy (input_control) number(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[float, int]]Htuple (double / Hlong)

Input point (y coordinate).

Pzpzpz (input_control) number(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[float, int]]Htuple (double / Hlong)

Input point (z coordinate).

Pwpwpw (input_control) number(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[float, int]]Htuple (double / Hlong)

Input point (w coordinate).

Qxqxqx (output_control) number(-array) → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Output point (x coordinate).

Qyqyqy (output_control) number(-array) → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Output point (y coordinate).

Qzqzqz (output_control) number(-array) → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Output point (z coordinate).

Qwqwqw (output_control) number(-array) → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Output point (w coordinate).

Combinations with other operators🔗

Combinations

Possible predecessors

vector_to_hom_mat3dVectorToHomMat3d

Alternatives

projective_trans_point_3dProjectiveTransPoint3d

Module🔗

Foundation