This repository has been archived on 2025-02-04. You can view files and clone it, but cannot push or open issues or pull requests.
helpless/oogabooga/linmath.c
2024-06-29 01:18:22 +02:00

61 lines
No EOL
1.4 KiB
C

typedef struct Vector2 {
union {float x, r;};
union {float y, g;};
} Vector2;
typedef Vector2 v2;
typedef struct Vector3 {
union {float x, r;};
union {float y, g;};
union {float z, b;};
} Vector3;
typedef Vector3 v3;
typedef struct Vector4 {
union {float x, r;};
union {float y, g;};
union {float z, b;};
union {float w, a;};
} Vector4;
typedef Vector4 v4;
// #Simd #Speed
Vector2 v2_add(Vector2 a, Vector2 b) {
return (v2){a.x + b.x, a.y + b.y};
}
Vector3 v3_add(Vector3 a, Vector3 b) {
return (v3){a.x + b.x, a.y + b.y, a.z + b.z};
}
Vector4 v4_add(Vector4 a, Vector4 b) {
return (v4){a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w};
}
Vector2 v2_sub(Vector2 a, Vector2 b) {
return (v2){a.x - b.x, a.y - b.y};
}
Vector3 v3_sub(Vector3 a, Vector3 b) {
return (v3){a.x - b.x, a.y - b.y, a.z - b.z};
}
Vector4 v4_sub(Vector4 a, Vector4 b) {
return (v4){a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w};
}
Vector2 v2_mul(Vector2 a, Vector2 b) {
return (v2){a.x * b.x, a.y * b.y};
}
Vector3 v3_mul(Vector3 a, Vector3 b) {
return (v3){a.x * b.x, a.y * b.y, a.z * b.z};
}
Vector4 v4_mul(Vector4 a, Vector4 b) {
return (v4){a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w};
}
Vector2 v2_div(Vector2 a, Vector2 b) {
return (v2){a.x / b.x, a.y / b.y};
}
Vector3 v3_div(Vector3 a, Vector3 b) {
return (v3){a.x / b.x, a.y / b.y, a.z / b.z};
}
Vector4 v4_div(Vector4 a, Vector4 b) {
return (v4){a.x / b.x, a.y / b.y, a.z / b.z, a.w / b.w};
}