Files
t3dsr/include/math/vector3.h

76 lines
2.0 KiB
C

#ifndef VEC3_H
#define VEC3_H
typedef struct {
float x, y, z;
} Vec3;
/**
* @brief Creates a new 3D vector.
* @param x X-axis coordinate.
* @param y Y-axis coordinate.
* @param z Z-axis coordinate.
* @return A pointer to the newly allocated 3D vector if
* successful, or NULL if the allocation fails.
*/
Vec3* vec3(float x, float y, float z);
/**
* @brief Adds two 3D vectors in a new 3D vector.
* @param v1 First vector.
* @param v2 Second vector.
* @return A pointer to a newly allocated 3D vector
* representing the sum of v1 and v2.
*/
Vec3* vec3Add(Vec3* v1, Vec3* v2);
/**
* @brief Subtracts two 3D vectors in a new 3D
* vector.
* @param v1 First vector.
* @param v2 Second vector.
* @return A pointer to a newly allocated 3D vector
* representing the subtraction of v1 and v2.
*/
Vec3* vec3Sub(Vec3* v1, Vec3* v2);
/**
* @brief Scales a 3D vector by a constant scalar in a
* new 3D vector.
* @param v 3D vector.
* @param scalar Constant.
* @return A pointer to a newly allocated 3D vector
* representing the multiplication of v1 and a
* scalar.
*/
Vec3* vec3Scale(Vec3* v, float scalar);
/**
* @brief Computes the dot product of two 3D vectors
* @param a First vector.
* @param b Second vector.
* @return The dot product of a and b as a scalar value
*/
float vec3Dot(Vec3* a, Vec3* b);
/**
* @brief Computes the Length (magnitude) of a 3D
* vector
* @param v The 3D vector.
* @return The length (magnitude) of the vector v as a
* scalar value.
*/
float vec3Len(Vec3* v);
Vec3* vec3Norm(Vec3* v);
Vec3* vec3Lerp(Vec3* a, Vec3* b, float t);
Vec3* vec3Cross(Vec3* a, Vec3* b);
float vec3Angle(Vec3* a, Vec3* b);
Vec3* vec3Proj(Vec3* a, Vec3* b);
Vec3* vec3Refl(Vec3* v, Vec3* normal);
float vec3Dist(Vec3* a, Vec3* b);
Vec3* vec3Rotate(Vec3* v, Vec3* axis, float angle);
void vec3Free(Vec3* v);
#endif // VEC3_H