ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/libgender/util.C
Revision: 1.2
Committed: Sun Oct 3 22:46:03 2004 UTC (22 years ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.1: +53 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.2 #include <cstdio> // ugly
2    
3 root 1.1 #include <cmath>
4    
5 root 1.2 #include <blitz/tinymat.h>
6    
7     using namespace blitz;
8    
9 root 1.1 #include "util.h"
10    
11     const vec3 normalize (const vec3 &v)
12     {
13     GLfloat s = 1. / sqrtf (v.x * v.x + v.y * v.y + v.z * v.z);
14    
15     return vec3 (v.x * s, v.y * s, v.z * s);
16     }
17    
18     const vec3 cross (const vec3 &a, const vec3 &b)
19     {
20     return vec3 (
21     a.y * b.z - a.z * b.y,
22     a.z * b.x - a.x * b.z,
23     a.x * b.y - a.y * b.x
24     );
25     }
26    
27     GLfloat dot (const vec3 &a, const vec3 &b)
28     {
29     return a.x * b.x + a.y * b.y + a.z * b.z;
30 root 1.2 }
31    
32     void gl_matrix::diagonal (GLfloat v)
33     {
34     for (int i = 4; i--; )
35     for (int j = 4; j--; )
36     data[i][j] = i == j ? v : 0.;
37     }
38    
39     const gl_matrix operator *(const gl_matrix &a, const gl_matrix &b)
40     {
41     gl_matrix r;
42    
43     int i, j, k;
44    
45     for (i = 0; i < 4; i++)
46     for (j = 0; j < 4; j++)
47     {
48     GLfloat s = 0.;
49     for (k = 0; k < 4; k++)
50     s += a(i,k) * b(k,j);
51    
52     r(i,j) = s;
53     }
54    
55     return r;
56     }
57    
58     void gl_matrix::print ()
59     {
60     printf ("\n");
61     printf ("[ %f, %f, %f, %f ]\n", data[0][0], data[1][0], data[2][0], data[3][0]);
62     printf ("[ %f, %f, %f, %f ]\n", data[0][1], data[1][1], data[2][1], data[3][1]);
63     printf ("[ %f, %f, %f, %f ]\n", data[0][2], data[1][2], data[2][2], data[3][2]);
64     printf ("[ %f, %f, %f, %f ]\n", data[0][3], data[1][3], data[2][3], data[3][3]);
65     }
66    
67     void gl_matrix::translate (const vec3 &v)
68     {
69     gl_matrix m(1);
70    
71     m(3,0) = v.x;
72     m(3,1) = v.y;
73     m(3,2) = v.z;
74     m(3,3) = 1;
75    
76     (*this) = (*this) * m;
77 root 1.1 }
78    
79     void box::add (const box &o)
80     {
81     a.x = min (a.x, o.a.x);
82     a.y = min (a.y, o.a.y);
83     a.z = min (a.z, o.a.z);
84     b.x = max (b.x, o.b.x);
85     b.y = max (b.y, o.b.y);
86     b.z = max (b.z, o.b.z);
87     }
88    
89     void box::add (const point &p)
90     {
91     a.x = min (a.x, p.x);
92     a.y = min (a.y, p.y);
93     a.z = min (a.z, p.z);
94     b.x = max (b.x, p.x);
95     b.y = max (b.y, p.y);
96     b.z = max (b.z, p.z);
97     }
98