Implement manual version
This commit is contained in:
parent
70514e7b5d
commit
ac64a206b0
16
01_no_metaprogramming/main.c
Normal file
16
01_no_metaprogramming/main.c
Normal file
@ -0,0 +1,16 @@
|
||||
#include "vec.h"
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
vec2i_t v1 = (vec2i_t){2, 3};
|
||||
vec2i_t v2 = (vec2i_t){4, 5};
|
||||
|
||||
vec_print(vec2i_t, vec_add(vec2i_t, v1, v2));
|
||||
vec_print(vec2i_t, vec_sub(vec2i_t, v1, v2));
|
||||
vec_print(vec2i_t, vec_mul(vec2i_t, v1, v2));
|
||||
printf("%d\n", vec_dot(vec2i_t, v1, v2));
|
||||
printf("%d\n", vec_magnitude(vec2i_t, v1));
|
||||
printf("%d\n", vec_magnitude(vec2i_t, v2));
|
||||
|
||||
return 0;
|
||||
}
|
96
01_no_metaprogramming/vec.c
Normal file
96
01_no_metaprogramming/vec.c
Normal file
@ -0,0 +1,96 @@
|
||||
#include "vec.h"
|
||||
#include "../aliases.h"
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
|
||||
void vec_print_vec2i_t(vec2i_t v) { printf("{%d, %d}\n", v.x, v.y); }
|
||||
|
||||
vec2i_t vec_add_vec2i_t(vec2i_t v1, vec2i_t v2) {
|
||||
return (vec2i_t){.x = v1.x + v2.x, .y = v1.y + v2.y};
|
||||
}
|
||||
|
||||
vec2i_t vec_sub_vec2i_t(vec2i_t v1, vec2i_t v2) {
|
||||
return (vec2i_t){.x = v1.x - v2.x, .y = v1.y - v2.y};
|
||||
}
|
||||
|
||||
vec2i_t vec_mul_vec2i_t(vec2i_t v1, vec2i_t v2) {
|
||||
return (vec2i_t){.x = v1.x * v2.x, .y = v1.y * v2.y};
|
||||
}
|
||||
|
||||
i32 vec_dot_vec2i_t(vec2i_t v1, vec2i_t v2) {
|
||||
return v1.x * v2.x + v1.y * v2.y;
|
||||
}
|
||||
|
||||
i32 vec_magnitude_vec2i_t(vec2i_t v) {
|
||||
i32 dot_product = vec_dot_vec2i_t(v, v);
|
||||
return (i32)sqrtf((f32)dot_product);
|
||||
}
|
||||
|
||||
void vec_print_vec2f_t(vec2f_t v) { printf("{%f, %f}\n", v.x, v.y); }
|
||||
|
||||
vec2f_t vec_add_vec2f_t(vec2f_t v1, vec2f_t v2) {
|
||||
return (vec2f_t){.x = v1.x + v2.x, .y = v1.y + v2.y};
|
||||
}
|
||||
|
||||
vec2f_t vec_sub_vec2f_t(vec2f_t v1, vec2f_t v2) {
|
||||
return (vec2f_t){.x = v1.x - v2.x, .y = v1.y - v2.y};
|
||||
}
|
||||
|
||||
vec2f_t vec_mul_vec2f_t(vec2f_t v1, vec2f_t v2) {
|
||||
return (vec2f_t){.x = v1.x * v2.x, .y = v1.y * v2.y};
|
||||
}
|
||||
|
||||
f32 vec_dot_vec2f_t(vec2f_t v1, vec2f_t v2) {
|
||||
return v1.x * v2.x + v1.y * v2.y;
|
||||
}
|
||||
|
||||
f32 vec_magnitude_vec2f_t(vec2f_t v) {
|
||||
f32 dot_product = vec_dot_vec2f_t(v, v);
|
||||
return sqrtf(dot_product);
|
||||
}
|
||||
|
||||
void vec_print_vec3i_t(vec3i_t v) { printf("{%d, %d, %d}\n", v.x, v.y, v.z); }
|
||||
|
||||
vec3i_t vec_add_vec3i_t(vec3i_t v1, vec3i_t v2) {
|
||||
return (vec3i_t){.x = v1.x + v2.x, .y = v1.y + v2.y, .z = v1.z + v2.z};
|
||||
}
|
||||
|
||||
vec3i_t vec_sub_vec3i_t(vec3i_t v1, vec3i_t v2) {
|
||||
return (vec3i_t){.x = v1.x - v2.x, .y = v1.y - v2.y, .z = v1.z - v2.z};
|
||||
}
|
||||
|
||||
vec3i_t vec_mul_vec3i_t(vec3i_t v1, vec3i_t v2) {
|
||||
return (vec3i_t){.x = v1.x * v2.x, .y = v1.y * v2.y, .z = v1.z * v2.z};
|
||||
}
|
||||
|
||||
i32 vec_dot_vec3i_t(vec3i_t v1, vec3i_t v2) {
|
||||
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
|
||||
}
|
||||
|
||||
i32 vec_magnitude_vec3i_t(vec3i_t v) {
|
||||
i32 dot_product = vec_dot_vec3i_t(v, v);
|
||||
return (i32)sqrtf((f32)dot_product);
|
||||
}
|
||||
|
||||
void vec_print_vec3f_t(vec3f_t v) { printf("{%f, %f, %f}\n", v.x, v.y, v.z); }
|
||||
|
||||
vec3f_t vec_add_vec3f_t(vec3f_t v1, vec3f_t v2) {
|
||||
return (vec3f_t){.x = v1.x + v2.x, .y = v1.y + v2.y, .z = v1.z + v2.z};
|
||||
}
|
||||
|
||||
vec3f_t vec_sub_vec3f_t(vec3f_t v1, vec3f_t v2) {
|
||||
return (vec3f_t){.x = v1.x - v2.x, .y = v1.y - v2.y, .z = v1.z - v2.z};
|
||||
}
|
||||
|
||||
vec3f_t vec_mul_vec3f_t(vec3f_t v1, vec3f_t v2) {
|
||||
return (vec3f_t){.x = v1.x * v2.x, .y = v1.y * v2.y, .z = v1.z * v2.z};
|
||||
}
|
||||
|
||||
f32 vec_dot_vec3f_t(vec3f_t v1, vec3f_t v2) {
|
||||
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
|
||||
}
|
||||
|
||||
f32 vec_magnitude_vec3f_t(vec3f_t v) {
|
||||
f32 dot_product = vec_dot_vec3f_t(v, v);
|
||||
return sqrtf(dot_product);
|
||||
}
|
63
01_no_metaprogramming/vec.h
Normal file
63
01_no_metaprogramming/vec.h
Normal file
@ -0,0 +1,63 @@
|
||||
#ifndef VEC_H
|
||||
#define VEC_H
|
||||
|
||||
#include "../aliases.h"
|
||||
|
||||
typedef struct {
|
||||
i32 x;
|
||||
i32 y;
|
||||
} vec2i_t;
|
||||
|
||||
typedef struct {
|
||||
f32 x;
|
||||
f32 y;
|
||||
} vec2f_t;
|
||||
|
||||
typedef struct {
|
||||
i32 x;
|
||||
i32 y;
|
||||
i32 z;
|
||||
} vec3i_t;
|
||||
|
||||
typedef struct {
|
||||
f32 x;
|
||||
f32 y;
|
||||
f32 z;
|
||||
} vec3f_t;
|
||||
|
||||
#define vec_print(T, v1) vec_print_##T(v1)
|
||||
#define vec_add(T, v1, v2) vec_add_##T(v1, v2)
|
||||
#define vec_sub(T, v1, v2) vec_sub_##T(v1, v2)
|
||||
#define vec_mul(T, v1, v2) vec_mul_##T(v1, v2)
|
||||
#define vec_dot(T, v1, v2) vec_dot_##T(v1, v2)
|
||||
#define vec_magnitude(T, v) vec_magnitude_##T(v)
|
||||
|
||||
void vec_print_vec2i_t(vec2i_t v);
|
||||
vec2i_t vec_add_vec2i_t(vec2i_t v1, vec2i_t v2);
|
||||
vec2i_t vec_sub_vec2i_t(vec2i_t v1, vec2i_t v2);
|
||||
vec2i_t vec_mul_vec2i_t(vec2i_t v1, vec2i_t v2);
|
||||
i32 vec_dot_vec2i_t(vec2i_t v1, vec2i_t v2);
|
||||
i32 vec_magnitude_vec2i_t(vec2i_t v);
|
||||
|
||||
void vec_print_vec2f_t(vec2f_t v);
|
||||
vec2f_t vec_add_vec2f_t(vec2f_t v1, vec2f_t v2);
|
||||
vec2f_t vec_sub_vec2f_t(vec2f_t v1, vec2f_t v2);
|
||||
vec2f_t vec_mul_vec2f_t(vec2f_t v1, vec2f_t v2);
|
||||
f32 vec_dot_vec2f_t(vec2f_t v1, vec2f_t v2);
|
||||
f32 vec_magnitude_vec2f_t(vec2f_t v);
|
||||
|
||||
void vec_print_vec3i_t(vec3i_t v);
|
||||
vec3i_t vec_add_vec3i_t(vec3i_t v1, vec3i_t v2);
|
||||
vec3i_t vec_sub_vec3i_t(vec3i_t v1, vec3i_t v2);
|
||||
vec3i_t vec_mul_vec3i_t(vec3i_t v1, vec3i_t v2);
|
||||
i32 vec_dot_vec3i_t(vec3i_t v1, vec3i_t v2);
|
||||
i32 vec_magnitude_vec3i_t(vec3i_t v);
|
||||
|
||||
void vec_print_vec3f_t(vec3f_t v);
|
||||
vec3f_t vec_add_vec3f_t(vec3f_t v1, vec3f_t v2);
|
||||
vec3f_t vec_sub_vec3f_t(vec3f_t v1, vec3f_t v2);
|
||||
vec3f_t vec_mul_vec3f_t(vec3f_t v1, vec3f_t v2);
|
||||
f32 vec_dot_vec3f_t(vec3f_t v1, vec3f_t v2);
|
||||
f32 vec_magnitude_vec3f_t(vec3f_t v);
|
||||
|
||||
#endif // !VEC_H
|
Loading…
Reference in New Issue
Block a user