]> git.lyx.org Git - lyx.git/blob - src/mathed/matriz.C
small cleanup, doxygen, formatting changes
[lyx.git] / src / mathed / matriz.C
1 #include <config.h>
2
3 #include <cstring>
4
5 #include "matriz.h"
6
7
8 static inline
9 int odd(int x)
10 {
11         return (x & 1);
12 }
13
14
15 #define mateq(m1, m2)  memcpy(m1, m2, sizeof(matriz_data))
16
17
18 Matriz::matriz_data const Matriz::MATIDEN = { {1, 0}, {0, 1}};
19
20
21 Matriz::Matriz()
22 {
23         mateq(m_, MATIDEN);
24 }
25
26
27 void Matriz::rota(int code)
28 {
29         matriz_data r;
30         mateq(r, MATIDEN);
31         float const cs = (odd(code)) ? 0 : (1 - code);
32         float const sn = (odd(code)) ? (2 - code) : 0;
33         r[0][0] = cs;
34         r[0][1] = sn;
35         r[1][0] = -r[0][1];
36         r[1][1] = r[0][0];
37         matmat(r);
38 }
39
40
41 void Matriz::escala(float x, float y)
42 {
43         matriz_data s;
44         mateq(s, MATIDEN);
45         s[0][0] = x;
46         s[1][1] = y;
47         matmat(s);
48 }
49
50
51 void Matriz::matmat(matriz_data & a)
52 {
53         matriz_data c;
54         c[0][0] = a[0][0] * m_[0][0] + a[0][1] * m_[1][0];
55         c[1][0] = a[1][0] * m_[0][0] + a[1][1] * m_[1][0];
56         c[0][1] = a[0][0] * m_[0][1] + a[0][1] * m_[1][1];
57         c[1][1] = a[1][0] * m_[0][1] + a[1][1] * m_[1][1];
58         mateq(m_, c);
59 }
60
61
62 void Matriz::transf(float xp, float yp, float & x, float & y)
63 {
64         x = m_[0][0] * xp + m_[0][1] * yp;
65         y = m_[1][0] * xp + m_[1][1] * yp;
66 }