Ben NanoNote 3D scans
Sign in or create your account | Project List | Help
Ben NanoNote 3D scans Git Source Tree
Root/
Source at commit f0a8bcd95e978480a1ef8a8a8f4a89b46bdc6e0d created 13 years 6 months ago. By Werner Almesberger, In POV-Ray output, move faces to more correct Z locations. | |
---|---|
1 | /* |
2 | * matrix.h - 2D matrix operations |
3 | * |
4 | * Written 2010 by Werner Almesberger |
5 | * Copyright 2010 by Werner Almesberger |
6 | * |
7 | * This program is free software; you can redistribute it and/or modify |
8 | * it under the terms of the GNU General Public License as published by |
9 | * the Free Software Foundation; either version 2 of the License, or |
10 | * (at your option) any later version. |
11 | */ |
12 | |
13 | #ifndef MATRIX_H |
14 | #define MATRIX_H |
15 | |
16 | /* |
17 | * 2D transformation: |
18 | * |
19 | * x' = x*a[0][0]+y*a[0][1]+b[0] |
20 | * y' = x*a[1][0]+y*a[1][1]+b[1] |
21 | */ |
22 | |
23 | |
24 | struct matrix { |
25 | double a[2][2]; |
26 | double b[2]; |
27 | }; |
28 | |
29 | |
30 | void matrix_identity(struct matrix *m); |
31 | void matrix_invert(const double m[2][2], double res[2][2]); |
32 | void matrix_mult(double a[2][2], double b[2][2], double res[2][2]); |
33 | void matrix_multv(const double v[2], double m[2][2], double res[2]); |
34 | void matrix_copy(double from[2][2], double to[2][2]); |
35 | |
36 | |
37 | static inline void matrix_map(int x, int y, const struct matrix *m, |
38 | double *res_x, double *res_y) |
39 | { |
40 | *res_x = x*m->a[0][0]+y*m->a[0][1]+m->b[0]; |
41 | *res_y = x*m->a[1][0]+y*m->a[1][1]+m->b[1]; |
42 | |
43 | } |
44 | |
45 | #endif /* !MATRIX_H */ |
46 |
Branches:
master