aboutsummaryrefslogtreecommitdiff
path: root/eng/src/vec2.c
blob: 8586c52ba95e03a771c689772b376447e129d44b (plain)
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include "vec2.h"

float2
tofloat2(int2 a)
{
	return F2(a.x, a.y);
}

int2
toint2(float2 a)
{
	return I2(a.x, a.y);
}

float2
float2_sub(float2 a, float2 b)
{
	return F2(a.x - b.x, a.y - b.y);
}

float2
float2_add(float2 a, float2 b)
{
	return F2(a.x + b.x, a.y + b.y);
}

float2
float2_mul(float2 a, float x)
{
	return F2(a.x * x, a.y * x);
}

float2
float2_div(float2 a, float x)
{
	return F2(a.x / x, a.y / x);
}

float
float2_length(float2 a)
{
	return sqrtf(a.x * a.x + a.y * a.y);
}

float2
float2_normalize(float2 a)
{
	const auto len = float2_length(a);
	if (len < 1.0)
		return a;
	return F2(a.x / len, a.y / len);
}

float
float2_angle(float2 a)
{
	return atanf(a.y / a.x) / 3.125 / 2 + 0.5 * (a.x < 0);
}

int2
float2_round(float2 a)
{
	return I2(roundf(a.x), roundf(a.y));
}

float2
float2_clamp(float2 min, float2 a, float2 max)
{
	forloop (i, 0, 2) {
		if (a.a[i] < min.a[i])
			a.a[i] = min.a[i];
		if (a.a[i] > max.a[i])
			a.a[i] = max.a[i];
	}
	return a;
}

float2
float2_swp(float2 a)
{
	return F2(a.y, a.x);
}

int2
int2_sub(int2 a, int2 b)
{
	return I2(a.x - b.x, a.y - b.y);
}

int2
int2_add(int2 a, int2 b)
{
	return I2(a.x + b.x, a.y + b.y);
}

int2
int2_mul(int2 a, float x)
{
	return I2(a.x * x, a.y * x);
}

int2
int2_div(int2 a, float x)
{
	return I2(a.x / x, a.y / x);
}

static int
___abs(int a)
{
	return (a < 0) ? (-a) : (a);
}

int2
int2_abs(int2 a)
{
	return I2(___abs(a.x), ___abs(a.y));
}

int2
int2_swp(int2 a)
{
	return I2(a.y, a.x);
}

int2
int2_inv(int2 a)
{
	return I2(-a.x, -a.y);
}