#include "matriz.h"
-inline
-int odd(int x) { return ((x) & 1); }
-typedef float matriz_data[2][2];
+static inline
+int odd(int x)
+{
+ return (x & 1);
+}
-const matriz_data MATIDEN= { {1, 0}, {0, 1}};
#define mateq(m1, m2) memcpy(m1, m2, sizeof(matriz_data))
+
+Matriz::matriz_data const Matriz::MATIDEN = { {1, 0}, {0, 1}};
+
+
Matriz::Matriz()
{
- mateq(m, MATIDEN);
+ mateq(m_, MATIDEN);
}
void Matriz::rota(int code)
{
- float cs, sn;
-
- matriz_data r;
- mateq(r, MATIDEN);
- cs = (odd(code)) ? 0: 1 - code;
- sn = (odd(code)) ? 2 - code: 0;
- r[0][0] = cs; r[0][1] = sn;
- r[1][0] = -r[0][1]; r[1][1] = r[0][0];
- matmat(r);
+ matriz_data r;
+ mateq(r, MATIDEN);
+ float const cs = (odd(code)) ? 0 : (1 - code);
+ float const sn = (odd(code)) ? (2 - code) : 0;
+ r[0][0] = cs;
+ r[0][1] = sn;
+ r[1][0] = -r[0][1];
+ r[1][1] = r[0][0];
+ matmat(r);
}
void Matriz::escala(float x, float y)
{
- matriz_data s;
- mateq(s, MATIDEN);
- s[0][0] = x; s[1][1] = y;
- matmat(s);
+ matriz_data s;
+ mateq(s, MATIDEN);
+ s[0][0] = x;
+ s[1][1] = y;
+ matmat(s);
}
void Matriz::matmat(matriz_data & a)
{
- matriz_data c;
- for (int i = 0;i < 2; ++i) {
- c[0][i] = a[0][0] * m[0][i] + a[0][1] * m[1][i];
- c[1][i] = a[1][0] * m[0][i] + a[1][1] * m[1][i];
- }
- mateq(m, c);
+ matriz_data c;
+ c[0][0] = a[0][0] * m_[0][0] + a[0][1] * m_[1][0];
+ c[1][0] = a[1][0] * m_[0][0] + a[1][1] * m_[1][0];
+ c[0][1] = a[0][0] * m_[0][1] + a[0][1] * m_[1][1];
+ c[1][1] = a[1][0] * m_[0][1] + a[1][1] * m_[1][1];
+ mateq(m_, c);
}
void Matriz::transf(float xp, float yp, float & x, float & y)
{
- x = m[0][0] * xp + m[0][1] * yp;
- y = m[1][0] * xp + m[1][1] * yp;
+ x = m_[0][0] * xp + m_[0][1] * yp;
+ y = m_[1][0] * xp + m_[1][1] * yp;
}