/* * 3D Engine * vector.h: * Based on pikuma.com 3D software renderer in C * Copyright (c) 2021 986-Studio. All rights reserved. * * Created by Manoƫl Trapier on 02/03/2021. */ #ifndef THREEDENGINE_SOURCE_INCLUDE_VECTOR_H #define THREEDENGINE_SOURCE_INCLUDE_VECTOR_H /*********************************************************************************************************************** * Data types **********************************************************************************************************************/ typedef struct vec2_t { double x, y; } vec2_t; typedef struct vec3_t { double x, y, z; } vec3_t; typedef struct vec4_t { double x, y, z, w; } vec4_t; /*********************************************************************************************************************** * Prototypes **********************************************************************************************************************/ /* ---------------------------------------------- 2D Vectors operations --------------------------------------------- */ static inline vec2_t vec2(double x, double y) { vec2_t ret = { x, y }; return ret; } double vec2Getlength(vec2_t v); vec2_t vec2AddVectors(vec2_t a, vec2_t b); vec2_t vec2SubVectors(vec2_t a, vec2_t b); vec2_t vec2ScalarMult(vec2_t a, double s); vec2_t vec2ScalarDiv(vec2_t a, double s); double vec2Dot(vec2_t a, vec2_t b); void vec2Normalize(vec2_t *a); vec2_t vec2FromVec4(vec4_t v); /* ---------------------------------------------- 3D Vectors operations --------------------------------------------- */ static inline vec3_t vec3(double x, double y, double z) { vec3_t ret = { x, y, z }; return ret; } double vec3Getlength(vec3_t v); vec3_t vec3AddVectors(vec3_t a, vec3_t b); vec3_t vec3SubVectors(vec3_t a, vec3_t b); vec3_t vec3ScalarMult(vec3_t a, double s); vec3_t vec3ScalarDiv(vec3_t a, double s); vec3_t vec3Cross(vec3_t a, vec3_t b); double vec3Dot(vec3_t a, vec3_t b); void vec3Normalize(vec3_t *a); vec3_t vec3FromVec4(vec4_t v); vec3_t vec3RotateX(vec3_t original, double angle); vec3_t vec3RotateY(vec3_t original, double angle); vec3_t vec3RotateZ(vec3_t original, double angle); /* ---------------------------------------------- 4D Vectors operations --------------------------------------------- */ vec4_t vec4FromVec3(vec3_t v); #endif /* THREEDENGINE_SOURCE_VECTOR_H */