hypercube-0.3.5
[polytopiary:hypercube.git] / dynamics.c
1 /*
2 hypercube -- interaction in four dimensions.
3 Copyright (C) 2006 Claude Heiland-Allen
4
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18 */
19 /* movement */
20
21 #include "cube4d.h"
22 #include "dynamics.h"
23 #include "fixed.h"
24 #include "geometry.h"
25
26 static matrix44 m_rot;
27
28 void d_init(void) {
29     m44_id(&m_rot);
30 }
31
32 void d_transform(c4dv *from, c4dv *to,
33     int a01, int a02, int a03, int a12, int a13, int a23
34 ) {
35     static int r01 = 0;
36     static int r02 = 0;
37     static int r03 = 0;
38     static int r12 = 0;
39     static int r13 = 0;
40     static int r23 = 0;
41     int i;
42     r01 += a01;
43     r02 += a02;
44     r03 += a03;
45     r12 += a12;
46     r13 += a13;
47     r23 += a23;
48     m44_rot6(&m_rot,
49         r01,
50         r02,
51         r03,
52         r12,
53         r13,
54         r23
55     );
56     for (i = 0; i < 16; i++) {
57         v4m44_mul(&((*from)[i]), &m_rot, &((*to)[i]));
58     }
59 }
60
61 /* EOF */