-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVECTOR.C
executable file
·113 lines (93 loc) · 2.06 KB
/
VECTOR.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/* This is library of functions that do vector math on stuff
Author: Bryce Lobdell
Date: 12/14/98
*/
#include "math.h"
#include "vector.h"
/* Returns the magnitude of a vector. */
float mag(struct vector v)
{
return sqrt(v.i*v.i+v.j*v.j+v.k*v.k);
}
struct vector scalaradd(struct vector vin,float scalar)
{
struct vector v;
v.i=vin.i+scalar;
v.j=vin.j+scalar;
v.k=vin.k+scalar;
return v;
}
/* Adds two vectors together */
struct vector vectoradd(struct vector v1,struct vector v2)
{
struct vector v;
v.i=v1.i+v2.i;
v.j=v1.j+v2.j;
v.k=v1.k+v2.k;
return v;
}
/* Multiplies the magnitude of a vector by -1 */
struct vector negate(struct vector v)
{
v.i=0-v.i;
v.j=0-v.j;
v.k=0-v.k;
return v;
}
/* Multiplies a vector by a scalar */
struct vector scalarmult(struct vector v,float scalar)
{
v.i=v.i*scalar;
v.j=v.j*scalar;
v.k=v.k*scalar;
return v;
}
/* Devides a vector by a scalar */
struct vector scalardiv(struct vector v,float scalar)
{
v.i=v.i/scalar;
v.j=v.j/scalar;
v.k=v.k/scalar;
return v;
}
/* Returns the cross product of two vectors
the process is icky and requires determinants
and ugly stuff like this */
struct vector crossproduct(struct vector v1,struct vector v2)
{
struct vector v;
v.i=v1.j*v2.k-v1.k*v2.j;
v.j=v1.k*v2.i-v1.i*v2.k;
v.k=v1.i*v2.j-v1.j*v2.i;
return v;
}
/* Finds the dot product of two vectors */
float dotproduct(struct vector v1,struct vector v2)
{
float dp;
dp=v1.i*v2.i+v1.j*v2.j+v1.k*v2.k;
return dp;
}
/* Finds the unit (length=1) vector for a givin vector */
struct vector unit(struct vector v)
{
return scalardiv(v,mag(v));
}
/* Multiplies two vectors together */
struct vector vectormult(struct vector v1,struct vector v2)
{
struct vector v;
v.i=v1.i*v2.i;
v.j=v1.j*v2.j;
v.k=v1.k*v2.k;
return v;
}
/* Divides two vectors together */
struct vector vectordiv(struct vector v1,struct vector v2)
{
struct vector v;
v.i=v1.i/v2.i;
v.j=v1.j/v2.j;
v.k=v1.k/v2.k;
return v;
}