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