testing
[physik/posic.git] / math / math.c
1 /*
2  * math.c - basic vector calculations
3  *
4  * author: Frank Zirkelbach <frank.zirkelbach@physik.uni-augsburg.de>
5  *
6  */
7
8
9 #include <string.h>
10 #include <math.h>
11
12 #include "math.h"
13
14 int v3_add(t_3dvec *sum,t_3dvec *a,t_3dvec *b) {
15
16         sum->x=a->x+b->x;
17         sum->y=a->y+b->y;
18         sum->z=a->z+b->z;
19
20         return 0;
21 }
22
23 int v3_sub(t_3dvec *sum,t_3dvec *a,t_3dvec *b) {
24
25         sum->x=a->x-b->x;
26         sum->y=a->y-b->y;
27         sum->z=a->z-b->z;
28
29         return 0;
30 }
31
32 int v3_scale(t_3dvec *result,t_3dvec *a,double s) {
33
34         result->x=s*a->x;
35         result->y=s*a->y;
36         result->z=s*a->z;
37
38         return 0;
39 }
40
41 int v3_zero(t_3dvec *vec) {
42
43         vec->x=.0;
44         vec->y=.0;
45         vec->z=.0;
46
47         return 0;
48 }
49
50 int v3_set(t_3dvec *vec,double *ptr) {
51
52         memcpy(vec,ptr,sizeof(t_3dvec));
53
54         return 0;
55 }
56
57 int v3_copy(t_3dvec *trg,t_3dvec *src) {
58
59         memcpy(trg,src,sizeof(t_3dvec));
60
61         return 0;
62 }
63
64 int v3_cmp(t_3dvec *a,t_3dvec *b) {
65
66         return(memcmp(a,b,sizeof(t_3dvec)));
67 }
68
69 double v3_absolute_square(t_3dvec *a) {
70
71         return(a->x*a->x+a->y*a->y+a->z*a->z);
72 }
73
74 double v3_norm(t_3dvec *a) {
75
76         return(sqrt(v3_absolute_square(a)));
77 }
78
79 int v3_per_bound(t_3dvec *a,t_3dvec *dim) {
80
81         double x,y,z;
82
83         x=0.5*dim->x;
84         y=0.5*dim->y;
85         z=0.5*dim->z;
86
87         if(a->x>=x) a->x-=dim->x;
88         else if(-a->x>x) a->x+=dim->x;
89         if(a->y>=y) a->y-=dim->y;
90         else if(-a->y>y) a->y+=dim->y;
91         if(a->z>=z) a->z-=dim->z;
92         else if(-a->z>z) a->z+=dim->z;
93
94         return 0;
95 }