]> git.bts.cx Git - benzene.git/blob - src/bz/math/vector.c
Sprites
[benzene.git] / src / bz / math / vector.c
1 #include <bz/math/vector.h>
2
3 #include <bz/math/math.h>
4
5 void bzVectorCopy(BZVector *vectorOut, const BZVector *vector) {
6 float x = vector->x;
7 float y = vector->y;
8 bzVectorSet(vectorOut, x, y);
9 }
10
11 void bzVectorMakeAngle(BZVector *vectorOut, float angle) {
12 float x = bzCosine(angle);
13 float y = bzSine(angle);
14 bzVectorSet(vectorOut, x, y);
15
16 }
17
18 void bzVectorInverse(BZVector *vectorOut, const BZVector *vector) {
19 float x = -(vector->x);
20 float y = -(vector->y);
21 bzVectorSet(vectorOut, x, y);
22 }
23
24 void bzVectorTangent(BZVector *vectorOut, const BZVector *vector) {
25 float x = -(vector->y);
26 float y = vector->x;
27 bzVectorSet(vectorOut, x, y);
28 }
29
30 void bzVectorAdd(BZVector *vectorOut, const BZVector *vector1, const BZVector *vector2) {
31 float x = vector1->x + vector2->x;
32 float y = vector1->y + vector2->y;
33 bzVectorSet(vectorOut, x, y);
34 }
35
36 void bzVectorSubtract(BZVector *vectorOut, const BZVector *vector1, const BZVector *vector2) {
37 float x = vector1->x - vector2->x;
38 float y = vector1->y - vector2->y;
39 bzVectorSet(vectorOut, x, y);
40 }
41
42 void bzVectorScale(BZVector *vectorOut, const BZVector *vector, float scale) {
43 float x = vector->x * scale;
44 float y = vector->y * scale;
45 bzVectorSet(vectorOut, x, y);
46 }
47
48 void bzVectorNormalized(BZVector *vectorOut, const BZVector *vector) {
49 float magnitude = bzVectorMagnitude(vector);
50 float x = vector->x / magnitude;
51 float y = vector->y / magnitude;
52 bzVectorSet(vectorOut, x, y);
53 }
54
55 float bzVectorMagnitude(const BZVector *vector) {
56 float sqMagnitude = bzVectorMagnitudeSquared(vector);
57 float magnitude = bzSqrt(sqMagnitude);
58 return magnitude;
59 }
60
61 float bzVectorMagnitudeSquared(const BZVector *vector) {
62 return bzVectorDot(vector, vector);
63 }
64
65 float bzVectorDot(const BZVector *vector1, const BZVector *vector2) {
66 float dot = (vector1->x * vector2->x) + (vector1->y * vector2->y);
67 return dot;
68 }
69
70 float bzVectorCross(const BZVector *vector1, const BZVector *vector2) {
71 float crossZ = (vector1->x * vector2->y) - (vector1->y * vector2->x);
72 return crossZ;
73 }
74
75 void bzVectorLerp(BZVector *vectorOut, const BZVector *vector1, const BZVector *vector2, float t) {
76 vectorOut->x = bzLerp(vector1->x, vector2->x, t);
77 vectorOut->y = bzLerp(vector1->y, vector2->y, t);
78 }
79