aboutsummaryrefslogtreecommitdiff
path: root/libc/inc/vec.h
blob: 9eb706c0f2b3168c0bf8a4d3c32fe6576cc214b2 (plain) (blame)
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
// MIT License, Copyright (c) 2021 Marvin Borner

#ifndef VEC_H
#define VEC_H

#include <def.h>

typedef struct vec2 {
	u32 x, y;
} vec2;

typedef struct vec3 {
	u32 x, y, z;
} vec3;

#define vec2_add(a, b) ((vec2){ a.x + b.x, a.y + b.y })
#define vec2_sub(a, b) ((vec2){ a.x - b.x, a.y - b.y })
#define vec2_mul(a, b) ((vec2){ a.x * b, a.y * b })
#define vec2_div(a, b) ((vec2){ a.x / b, a.y / b })
#define vec2_dot(a, b) ((u32)(a.x * b.x + a.y * b.y))
#define vec2_eq(a, b) (a.x == b.x && a.y == b.y)

#define vec3_add(a, b) ((vec3){ a.x + b.x, a.y + b.y, a.z + b.z })
#define vec3_sub(a, b) ((vec3){ a.x - b.x, a.y - b.y, a.z - b.z })
#define vec3_mul(a, b) ((vec3){ a.x * b, a.y * b, a.z * b })
#define vec3_div(a, b) ((vec3){ a.x / b, a.y / b, a.z / b })
#define vec3_dot(a, b) ((u32)(a.x * b.x + a.y * b.y + a.z * b.z))
#define vec3_eq(a, b) (a.x == b.x && a.y == b.y && a.z == c.z)
#define vec3_cross(a, b)                                                                           \
	((vec3){ a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x })

#endif