1 #ifndef VECTOR3_H
2 #define VECTOR3_H 1
3 
4 #include <boolean.h>
5 
6 typedef struct {
7   double x, y, z;
8 } vector3;
9 
10 void
11 v3_initialize (vector3 *dest, const double x, const double y, const double z);
12 
13 void
14 v3_sum (vector3 *dest, const vector3 *v1, const vector3 *v2);
15 
16 void
17 v3_difference (vector3 *dest, const vector3 *v1, const vector3 *v2);
18 
19 void
20 v3_scaled (vector3 *dest, const double s, const vector3 *src);
21 
22 void
23 v3_add (vector3 *dest, const vector3 *v);
24 
25 void
26 v3_subtract (vector3 *dest, const vector3 *v);
27 
28 void
29 v3_scale (vector3 *dest, const double s);
30 
31 void
32 v3_invert (vector3 *v);
33 
34 void
35 v3_reverse (vector3 *v);
36 
37 void
38 v3_sum_scaled (vector3 *dest, const vector3 *v1,
39 	       const double s, const vector3 *v2);
40 
41 void
42 v3_add_scaled (vector3 *dest, const double s, const vector3 *v);
43 
44 double
45 v3_length (const vector3 *v);
46 
47 double
48 v3_angle (const vector3 *v1, const vector3 *v2);
49 
50 double
51 v3_angle_points (const vector3 *p1, const vector3 *p2, const vector3 *p3);
52 
53 double
54 v3_torsion (const vector3 *p1, const vector3 *v1,
55 	    const vector3 *p2, const vector3 *v2);
56 
57 double
58 v3_torsion_points (const vector3 *p1, const vector3 *p2,
59 		   const vector3 *p3, const vector3 *p4);
60 
61 double
62 v3_dot_product (const vector3 *v1, const vector3 *v2);
63 
64 void
65 v3_cross_product (vector3 *vz, const vector3 *vx, const vector3 *vy);
66 
67 void
68 v3_triangle_normal (vector3 *n,
69 		    const vector3 *p1, const vector3 *p2, const vector3 *p3);
70 
71 double
72 v3_sqdistance (const vector3 *p1, const vector3 *p2);
73 
74 double
75 v3_distance (const vector3 *p1, const vector3 *p2);
76 
77 boolean
78 v3_close (const vector3 *v1, const vector3 *v2, const double sqdistance);
79 
80 void
81 v3_normalize (vector3 *v);
82 
83 void
84 v3_middle (vector3 *dest, const vector3 *p1, const vector3 *p2);
85 
86 void
87 v3_between (vector3 *dest,
88 	    const vector3 *p1, const vector3 *p2, const double fraction);
89 
90 int
91 v3_different (const vector3 *v1, const vector3 *v2);
92 
93 #endif
94