1 #ifndef __COMPLEX_TRANSFORM_H__
2 #define __COMPLEX_TRANSFORM_H__
8 template <
size_t matrix_order>
21 for (
size_t i = 0; i < matrix_order; i++) {
33 template <
size_t matrix_order,
typename Operation>
42 if constexpr (matrix_order == 2) {
46 else if constexpr (matrix_order == 3) {
51 else if constexpr (matrix_order > 3) {
54 for (
size_t i = 2; i < matrix_order; i++) {
65 return new Operation(
matrix);
67 static void destroy(Operation* transform) {
73 template <
size_t matrix_order>
95 template <
size_t matrix_order>
103 matrix[0][0] = cos(angle * 2);
104 matrix[0][1] = sin(angle * 2);
111 template <
size_t matrix_order>
132 template <
size_t matrix_order>
151 template <
size_t matrix_order>
160 matrix[1][1] = 1.f / scale;
167 template <
size_t matrix_order>
186 template <
size_t matrix_order>
195 typename std::enable_if<matrix_order == 3>::type
translate(
float re,
float im) {
211 template <
size_t matrix_order>
244 template <
typename... Transforms>
261 template <
typename... Transforms>
263 MatrixType* transform, Transforms*... transform_ptrs) {
276 template <
size_t matrix_order>
297 float mult = 1.f / input.
getSize();
298 for (
size_t i = 0; i < matrix_order; i++) {
299 for (
size_t j = 0; j < matrix_order; j++) {
304 for (
size_t i = 0; i < input.
getSize(); i++) {
306 output[i] = this->
process(input[i]);
317 template <
typename... Transforms>
340 template <
typename... Transforms>
342 MatrixType* transform, Transforms*... transform_ptrs) {
AbstractMatrix(FloatMatrix matrix)
virtual ComplexFloat process(ComplexFloat input)=0
This class contains useful methods for manipulating NxN dimensioned matrices of floats.
static FloatMatrix create(size_t rows, size_t columns)
Creates a new FloatMatrix.
void clear()
Clear the array.
static void destroy(FloatMatrix array)
Destroys a FloatMatrix created with the create() method.
void multiply(FloatMatrix operand2, FloatMatrix destination)
Element-wise multiplication between arrays.
void add(FloatMatrix operand2, FloatMatrix destination)
Element-wise sum between matrices.
void copyFrom(FloatMatrix source)
Copies the content of another matrix into this matrix.
void reflect(float angle)
void rotate(ComplexFloat angle)
void scale(ComplexFloat vector)
void squeeze(float scale)
void stretch(ComplexFloat vector)
void stretch(float re, float im)
std::enable_if< matrix_order==3 >::type translate(float re, float im)
std::enable_if< matrix_order==3 >::type translate(ComplexFloat vector)
A structure defining a floating point complex number as two members of type float.
float im
The imaginary part of the complex number.
float re
The real part of the complex number.