Skip to content

hom_mat3d_scaleHomMat3dScaleHomMat3dScalehom_mat3d_scaleT_hom_mat3d_scale🔗

Short description🔗

hom_mat3d_scaleHomMat3dScaleHomMat3dScalehom_mat3d_scaleT_hom_mat3d_scale — Add a scaling to a homogeneous 3D transformation matrix.

Signature🔗

hom_mat3d_scale( hom_mat3d HomMat3D, number Sx, number Sy, number Sz, point3d.x Px, point3d.y Py, point3d.z Pz, out hom_mat3d HomMat3DScale )void HomMat3dScale( const HTuple& HomMat3D, const HTuple& Sx, const HTuple& Sy, const HTuple& Sz, const HTuple& Px, const HTuple& Py, const HTuple& Pz, HTuple* HomMat3DScale )static void HOperatorSet.HomMat3dScale( HTuple homMat3D, HTuple sx, HTuple sy, HTuple sz, HTuple px, HTuple py, HTuple pz, out HTuple homMat3DScale )def hom_mat3d_scale( hom_mat_3d: Sequence[float], sx: Union[float, int], sy: Union[float, int], sz: Union[float, int], px: Union[float, int], py: Union[float, int], pz: Union[float, int] ) -> Sequence[float]

Herror T_hom_mat3d_scale( const Htuple HomMat3D, const Htuple Sx, const Htuple Sy, const Htuple Sz, const Htuple Px, const Htuple Py, const Htuple Pz, Htuple* HomMat3DScale )

HHomMat3D HHomMat3D::HomMat3dScale( const HTuple& Sx, const HTuple& Sy, const HTuple& Sz, const HTuple& Px, const HTuple& Py, const HTuple& Pz ) const

HHomMat3D HHomMat3D::HomMat3dScale( double Sx, double Sy, double Sz, double Px, double Py, double Pz ) const

HHomMat3D HHomMat3D.HomMat3dScale( HTuple sx, HTuple sy, HTuple sz, HTuple px, HTuple py, HTuple pz )

HHomMat3D HHomMat3D.HomMat3dScale( double sx, double sy, double sz, double px, double py, double pz )

Description🔗

hom_mat3d_scaleHomMat3dScale adds a scaling by the scale factors Sxsxsx, Sysysy, and Szszsz to the homogeneous 3D transformation matrix HomMat3DhomMat3Dhom_mat_3d and returns the resulting matrix in HomMat3DScalehomMat3DScalehom_mat_3dscale. The scaling is described by a 3×3 scaling matrix S. It is performed relative to the global (i.e., fixed) coordinate system; this corresponds to the following chain of transformation matrices:

\[\begin{eqnarray*} \textrm{HomMat3DScale} = \mvHomMatrixThreeDRotTrans{\mvScalingMatrixVar{}{}} {\mvVectorThreeDPlain{0}{0}{0}} \cdot \textrm{HomMat3D} \qquad \mvScalingMatrixVar{}{} = \mvMatrix{ \textrm{Sx} & 0 & 0 \\ 0 & \textrm{Sy} & 0 \\ 0 & 0 & \textrm{Sz}} \end{eqnarray*}\]

The point (Pxpxpx,Pypypy,Pzpzpz) is the fixed point of the transformation, i.e., this point remains unchanged when transformed using HomMat3DScalehomMat3DScalehom_mat_3dscale. To obtain this behavior, first a translation is added to the input transformation matrix that moves the fixed point onto the origin of the global coordinate system. Then, the scaling is added, and finally a translation that moves the fixed point back to its original position. This corresponds to the following chain of transformations:

\[\begin{eqnarray*} \textrm{HomMat3DScale} = \mvHomMatrixThreeDElements{ 1 & 0 & 0 & + \textrm{Px} \\ 0 & 1 & 0 & + \textrm{Py} \\ 0 & 0 & 1 & + \textrm{Pz}} \cdot \mvHomMatrixThreeDRotTrans{\mvScalingMatrixVar{}{}} {\mvVectorThreeDPlain{0}{0}{0}} \cdot \mvHomMatrixThreeDElements{ 1 & 0 & 0 & - \textrm{Px} \\ 0 & 1 & 0 & - \textrm{Py} \\ 0 & 0 & 1 & - \textrm{Pz}} \cdot \textrm{HomMat3D} \end{eqnarray*}\]

To perform the transformation in the local coordinate system, i.e., the one described by HomMat3DhomMat3Dhom_mat_3d, use hom_mat3d_scale_localHomMat3dScaleLocal.

Attention🔗

Note that homogeneous matrices are stored row-by-row as a tuple; the last row is usually not stored because it is identical for all homogeneous matrices that describe an affine transformation. For example, the homogeneous matrix \(\mvHomMatrixThreeDElements{ ra & rb & rc & td \\ re & rf & rg & th \\ ri & rj & rk & tl}\) is stored as the tuple [ra, rb, rc, td, re, rf, rg, th, ri, rj, rk, tl]. However, it is also possible to process full 4×4 matrices, which represent a projective 4D transformation.

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🔗

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

Input transformation matrix.

Sxsxsx (input_control) number → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)Union[float, int]Htuple (double / Hlong)

Scale factor along the x-axis.

Default: 22
Suggested values: 0.125, 0.25, 0.5, 1, 2, 4, 8, 1120.125, 0.25, 0.5, 1, 2, 4, 8, 112
Restriction: Sx != 0

Sysysy (input_control) number → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)Union[float, int]Htuple (double / Hlong)

Scale factor along the y-axis.

Default: 22
Suggested values: 0.125, 0.25, 0.5, 1, 2, 4, 8, 1120.125, 0.25, 0.5, 1, 2, 4, 8, 112
Restriction: Sy != 0

Szszsz (input_control) number → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)Union[float, int]Htuple (double / Hlong)

Scale factor along the z-axis.

Default: 22
Suggested values: 0.125, 0.25, 0.5, 1, 2, 4, 8, 1120.125, 0.25, 0.5, 1, 2, 4, 8, 112
Restriction: Sz != 0

Pxpxpx (input_control) point3d.x → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)Union[float, int]Htuple (double / Hlong)

Fixed point of the transformation (x coordinate).

Default: 00
Suggested values: 0, 16, 32, 64, 128, 256, 512, 10240, 16, 32, 64, 128, 256, 512, 1024

Pypypy (input_control) point3d.y → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)Union[float, int]Htuple (double / Hlong)

Fixed point of the transformation (y coordinate).

Default: 00
Suggested values: 0, 16, 32, 64, 128, 256, 512, 10240, 16, 32, 64, 128, 256, 512, 1024

Pzpzpz (input_control) point3d.z → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)Union[float, int]Htuple (double / Hlong)

Fixed point of the transformation (z coordinate).

Default: 00
Suggested values: 0, 16, 32, 64, 128, 256, 512, 10240, 16, 32, 64, 128, 256, 512, 1024

HomMat3DScalehomMat3DScalehom_mat_3dscale (output_control) hom_mat3d → (real)HTuple (double)HHomMat3D, HTuple (double)Sequence[float]Htuple (double)

Output transformation matrix.

Result🔗

hom_mat3d_scaleHomMat3dScale returns 2 (H_MSG_TRUE) if all three scale factors are not 0. If necessary, an exception is raised.

Combinations with other operators🔗

Combinations

Possible predecessors

hom_mat3d_identityHomMat3dIdentity, hom_mat3d_translateHomMat3dTranslate, hom_mat3d_scaleHomMat3dScale, hom_mat3d_rotateHomMat3dRotate

Possible successors

hom_mat3d_translateHomMat3dTranslate, hom_mat3d_scaleHomMat3dScale, hom_mat3d_rotateHomMat3dRotate

See also

hom_mat3d_invertHomMat3dInvert, hom_mat3d_identityHomMat3dIdentity, hom_mat3d_scale_localHomMat3dScaleLocal, pose_to_hom_mat3dPoseToHomMat3d, hom_mat3d_to_poseHomMat3dToPose, hom_mat3d_composeHomMat3dCompose

Module🔗

Foundation