zenilib  0.5.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
lib3ds_vector.c
Go to the documentation of this file.
1 /*
2  Copyright (C) 1996-2008 by Jan Eric Kyprianidis <www.kyprianidis.com>
3  All rights reserved.
4 
5  This program is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published
7  by the Free Software Foundation, either version 2.1 of the License, or
8  (at your option) any later version.
9 
10  Thisprogram 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 Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with this program; If not, see <http://www.gnu.org/licenses/>.
17 */
18 #include "lib3ds_impl.h"
19 
20 
21 void
22 lib3ds_vector_make(float c[3], float x, float y, float z) {
23  c[0] = x;
24  c[1] = y;
25  c[2] = z;
26 }
27 
28 
29 void
30 lib3ds_vector_zero(float c[3]) {
31  int i;
32  for (i = 0; i < 3; ++i) {
33  c[i] = 0.0f;
34  }
35 }
36 
37 
38 void
39 lib3ds_vector_copy(float dst[3], float src[3]) {
40  int i;
41  for (i = 0; i < 3; ++i) {
42  dst[i] = src[i];
43  }
44 }
45 
46 
54 void
55 lib3ds_vector_add(float c[3], float a[3], float b[3]) {
56  int i;
57  for (i = 0; i < 3; ++i) {
58  c[i] = a[i] + b[i];
59  }
60 }
61 
62 
70 void
71 lib3ds_vector_sub(float c[3], float a[3], float b[3]) {
72  int i;
73  for (i = 0; i < 3; ++i) {
74  c[i] = a[i] - b[i];
75  }
76 }
77 
78 
85 void
86 lib3ds_vector_scalar_mul(float c[3], float a[3], float k) {
87  int i;
88  for (i = 0; i < 3; ++i) {
89  c[i] = a[i] * k;
90  }
91 }
92 
93 
101 void
102 lib3ds_vector_cross(float c[3], float a[3], float b[3]) {
103  c[0] = a[1] * b[2] - a[2] * b[1];
104  c[1] = a[2] * b[0] - a[0] * b[2];
105  c[2] = a[0] * b[1] - a[1] * b[0];
106 }
107 
108 
117 float
118 lib3ds_vector_dot(float a[3], float b[3]) {
119  return(a[0]*b[0] + a[1]*b[1] + a[2]*b[2]);
120 }
121 
122 
132 float
134  return((float)sqrt(c[0]*c[0] + c[1]*c[1] + c[2]*c[2]));
135 }
136 
137 
145 void
147  float l, m;
148 
149  l = (float)sqrt(c[0] * c[0] + c[1] * c[1] + c[2] * c[2]);
150  if (fabs(l) < LIB3DS_EPSILON) {
151  if ((c[0] >= c[1]) && (c[0] >= c[2])) {
152  c[0] = 1.0f;
153  c[1] = c[2] = 0.0f;
154  } else
155  if (c[1] >= c[2]) {
156  c[1] = 1.0f;
157  c[0] = c[2] = 0.0f;
158  } else {
159  c[2] = 1.0f;
160  c[0] = c[1] = 0.0f;
161  }
162  } else {
163  m = 1.0f / l;
164  c[0] *= m;
165  c[1] *= m;
166  c[2] *= m;
167  }
168 }
169 
170 
181 void
182 lib3ds_vector_normal(float n[3], float a[3], float b[3], float c[3]) {
183  float p[3], q[3];
184 
185  lib3ds_vector_sub(p, c, b);
186  lib3ds_vector_sub(q, a, b);
187  lib3ds_vector_cross(n, p, q);
189 }
190 
191 
202 void
203 lib3ds_vector_transform(float c[3], float m[4][4], float a[3]) {
204  c[0] = m[0][0] * a[0] + m[1][0] * a[1] + m[2][0] * a[2] + m[3][0];
205  c[1] = m[0][1] * a[0] + m[1][1] * a[1] + m[2][1] * a[2] + m[3][1];
206  c[2] = m[0][2] * a[0] + m[1][2] * a[1] + m[2][2] * a[2] + m[3][2];
207 }
208 
209 
215 void
216 lib3ds_vector_min(float c[3], float a[3]) {
217  int i;
218  for (i = 0; i < 3; ++i) {
219  if (a[i] < c[i]) {
220  c[i] = a[i];
221  }
222  }
223 }
224 
225 
231 void
232 lib3ds_vector_max(float c[3], float a[3]) {
233  int i;
234  for (i = 0; i < 3; ++i) {
235  if (a[i] > c[i]) {
236  c[i] = a[i];
237  }
238  }
239 }
240 
241 
242 void
244  fprintf(stderr, "%f %f %f\n", c[0], c[1], c[2]);
245 }
246 
LIB3DSAPI void lib3ds_vector_transform(float c[3], float m[4][4], float a[3])
int32_t k
Definition: e_log.c:102
GLclampd n
Definition: glew.h:7287
EGLSurface EGLint x
Definition: eglext.h:293
GLboolean GLboolean GLboolean GLboolean a
Definition: glew.h:8736
LIB3DSAPI void lib3ds_vector_max(float c[3], float a[3])
LIB3DSAPI void lib3ds_vector_min(float c[3], float a[3])
LIB3DSAPI void lib3ds_vector_copy(float dst[3], float src[3])
Definition: lib3ds_vector.c:39
GLenum GLenum dst
Definition: glew.h:2396
LIB3DSAPI void lib3ds_vector_make(float c[3], float x, float y, float z)
Definition: lib3ds_vector.c:22
void lib3ds_vector_dump(float c[3])
GLfloat GLfloat p
Definition: glew.h:14938
LIB3DSAPI void lib3ds_vector_zero(float c[3])
Definition: lib3ds_vector.c:30
const GLfloat * c
Definition: glew.h:14913
LIB3DSAPI void lib3ds_vector_normalize(float c[3])
LIB3DSAPI void lib3ds_vector_normal(float n[3], float a[3], float b[3], float c[3])
LIB3DSAPI void lib3ds_vector_add(float c[3], float a[3], float b[3])
Definition: lib3ds_vector.c:55
#define LIB3DS_EPSILON
Definition: lib3ds_impl.h:55
EGLSurface EGLint EGLint y
Definition: eglext.h:293
GLdouble l
Definition: glew.h:8383
LIB3DSAPI void lib3ds_vector_scalar_mul(float c[3], float a[3], float k)
Definition: lib3ds_vector.c:86
LIB3DSAPI void lib3ds_vector_sub(float c[3], float a[3], float b[3])
Definition: lib3ds_vector.c:71
GLdouble GLdouble GLdouble GLdouble q
Definition: glew.h:1400
LIB3DSAPI void lib3ds_vector_cross(float c[3], float a[3], float b[3])
GLdouble GLdouble GLdouble b
Definition: glew.h:8383
GLint GLint GLint GLint z
Definition: gl2ext.h:1214
LIB3DSAPI float lib3ds_vector_dot(float a[3], float b[3])
GLenum src
Definition: glew.h:2396
int i
Definition: pngrutil.c:1377
LIB3DSAPI float lib3ds_vector_length(float c[3])
double fabs(double x)
Definition: s_fabs.c:29
#define m(i, j)
const GLdouble * m
Definition: glew.h:8385