(Feat): Initial Commit.
This commit is contained in:
115
include/vec3.h
Normal file
115
include/vec3.h
Normal file
@@ -0,0 +1,115 @@
|
||||
/**
|
||||
* @file vec3.h
|
||||
* @brief 3D Vector mathematics for ASCII 3D Renderer
|
||||
* @author ASCII3D Project
|
||||
* @version 1.0.0
|
||||
*/
|
||||
|
||||
#ifndef ASCII3D_VEC3_H
|
||||
#define ASCII3D_VEC3_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief 3D Vector structure
|
||||
*/
|
||||
typedef struct Vec3 {
|
||||
float x;
|
||||
float y;
|
||||
float z;
|
||||
} Vec3;
|
||||
|
||||
/**
|
||||
* @brief Create a new Vec3
|
||||
* @param x X component
|
||||
* @param y Y component
|
||||
* @param z Z component
|
||||
* @return New Vec3 instance
|
||||
*/
|
||||
Vec3 vec3_create(float x, float y, float z);
|
||||
|
||||
/**
|
||||
* @brief Add two vectors
|
||||
* @param a First vector
|
||||
* @param b Second vector
|
||||
* @return Result of a + b
|
||||
*/
|
||||
Vec3 vec3_add(Vec3 a, Vec3 b);
|
||||
|
||||
/**
|
||||
* @brief Subtract two vectors
|
||||
* @param a First vector
|
||||
* @param b Second vector
|
||||
* @return Result of a - b
|
||||
*/
|
||||
Vec3 vec3_sub(Vec3 a, Vec3 b);
|
||||
|
||||
/**
|
||||
* @brief Scale a vector by a scalar
|
||||
* @param v Vector to scale
|
||||
* @param s Scalar value
|
||||
* @return Scaled vector
|
||||
*/
|
||||
Vec3 vec3_scale(Vec3 v, float s);
|
||||
|
||||
/**
|
||||
* @brief Calculate dot product of two vectors
|
||||
* @param a First vector
|
||||
* @param b Second vector
|
||||
* @return Dot product
|
||||
*/
|
||||
float vec3_dot(Vec3 a, Vec3 b);
|
||||
|
||||
/**
|
||||
* @brief Calculate cross product of two vectors
|
||||
* @param a First vector
|
||||
* @param b Second vector
|
||||
* @return Cross product
|
||||
*/
|
||||
Vec3 vec3_cross(Vec3 a, Vec3 b);
|
||||
|
||||
/**
|
||||
* @brief Calculate length of a vector
|
||||
* @param v Vector
|
||||
* @return Length
|
||||
*/
|
||||
float vec3_length(Vec3 v);
|
||||
|
||||
/**
|
||||
* @brief Normalize a vector
|
||||
* @param v Vector to normalize
|
||||
* @return Normalized vector
|
||||
*/
|
||||
Vec3 vec3_normalize(Vec3 v);
|
||||
|
||||
/**
|
||||
* @brief Rotate vector around X axis
|
||||
* @param v Vector to rotate
|
||||
* @param angle Angle in radians
|
||||
* @return Rotated vector
|
||||
*/
|
||||
Vec3 vec3_rotate_x(Vec3 v, float angle);
|
||||
|
||||
/**
|
||||
* @brief Rotate vector around Y axis
|
||||
* @param v Vector to rotate
|
||||
* @param angle Angle in radians
|
||||
* @return Rotated vector
|
||||
*/
|
||||
Vec3 vec3_rotate_y(Vec3 v, float angle);
|
||||
|
||||
/**
|
||||
* @brief Rotate vector around Z axis
|
||||
* @param v Vector to rotate
|
||||
* @param angle Angle in radians
|
||||
* @return Rotated vector
|
||||
*/
|
||||
Vec3 vec3_rotate_z(Vec3 v, float angle);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* ASCII3D_VEC3_H */
|
||||
Reference in New Issue
Block a user