MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
MatrixTransforms.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <Eigen/Dense>
4#include <vector>
5
6namespace MayaFlux::Kinesis {
7
8/**
9 * @brief Create N-dimensional rotation matrix
10 * @param angle Rotation angle in radians
11 * @param axis Rotation axis index (0=X, 1=Y, 2=Z). Only used when dimensions >= 3
12 * @param dimensions Dimensionality of the rotation (2 or 3 supported directly,
13 * higher dimensions return identity)
14 * @return Rotation matrix as Eigen::MatrixXd
15 */
16[[nodiscard]] Eigen::MatrixXd create_rotation_matrix(
17 double angle,
18 uint32_t axis = 2,
19 uint32_t dimensions = 2);
20
21/**
22 * @brief Create diagonal scaling matrix from per-axis factors
23 * @param scale_factors Scale value per dimension. Empty input returns 1x1 identity.
24 * @return Diagonal scaling matrix (NxN where N = scale_factors.size())
25 */
26[[nodiscard]] Eigen::MatrixXd create_scaling_matrix(
27 const std::vector<double>& scale_factors);
28
29/**
30 * @brief Create uniform scaling matrix
31 * @param scale Uniform scale factor applied to all axes
32 * @param dimensions Number of dimensions
33 * @return Diagonal scaling matrix (NxN)
34 */
35[[nodiscard]] Eigen::MatrixXd create_uniform_scaling_matrix(
36 double scale,
37 uint32_t dimensions);
38
39/**
40 * @brief Create translation vector (not a matrix; affine embedding is caller's concern)
41 * @param offsets Per-axis translation values
42 * @return Column vector of offsets
43 */
44[[nodiscard]] Eigen::VectorXd create_translation_vector(
45 const std::vector<double>& offsets);
46
47/**
48 * @brief Compose rotation then scaling: S * R
49 * @param angle Rotation angle in radians
50 * @param scale_factors Per-axis scale factors (must match dimensions)
51 * @param axis Rotation axis index (for 3D)
52 * @param dimensions Dimensionality
53 * @return Combined transformation matrix
54 */
55[[nodiscard]] Eigen::MatrixXd create_rotation_scaling_matrix(
56 double angle,
57 const std::vector<double>& scale_factors,
58 uint32_t axis = 2,
59 uint32_t dimensions = 2);
60
61} // namespace MayaFlux::Kinesis
Eigen::MatrixXd create_rotation_scaling_matrix(double angle, const std::vector< double > &scale_factors, uint32_t axis, uint32_t dimensions)
Compose rotation then scaling: S * R.
Eigen::MatrixXd create_uniform_scaling_matrix(double scale, uint32_t dimensions)
Create uniform scaling matrix.
Eigen::VectorXd create_translation_vector(const std::vector< double > &offsets)
Create translation vector (not a matrix; affine embedding is caller's concern)
Eigen::MatrixXd create_scaling_matrix(const std::vector< double > &scale_factors)
Create diagonal scaling matrix from per-axis factors.
Eigen::MatrixXd create_rotation_matrix(double angle, uint32_t axis, uint32_t dimensions)
Create N-dimensional rotation matrix.
Tendency< D, float > scale(const Tendency< D, float > &t, float factor)
Uniform scaling of a scalar-output tendency.
Definition Tendency.hpp:97