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
-
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