commit 70ca3428213d01206619c7685645e4382b73de23 Author: cfif Date: Mon Jun 2 13:26:42 2025 +0300 Init diff --git a/Inc/vector.h b/Inc/vector.h new file mode 100644 index 0000000..5736dc8 --- /dev/null +++ b/Inc/vector.h @@ -0,0 +1,83 @@ +/* + * vector.h + * + * Created on: Mar 4, 2021 + * Author: zemon + */ + +#ifndef VECTOR_H_ +#define VECTOR_H_ + +#include "stdint.h" + +typedef struct { + double x; + double y; +} vector2double; + +typedef struct { + float x; + float y; +} vector2; + +typedef struct { + uint16_t x; + uint16_t y; + uint16_t z; +} vector3uint16; + +typedef struct { + int16_t x; + int16_t y; + int16_t z; +} vector3int16; + +typedef struct { + int32_t x; + int32_t y; + int32_t z; +} vector3int32; + +typedef struct { + float x; + float y; + float z; +} vector3; + +vector3 vector3Add(vector3 one, vector3 two); + +vector3 vector3Less(vector3 one, vector3 two); + +vector3 vector3DivNum(vector3 vec, float num); + +vector3 vector3MultiplyNum(vector3 vec, float num); + +float vector3Sum(vector3 vec); + +float vector3DotProduct(vector3 first, vector3 second); + +float vector3LenSquare(vector3 vec); + +float vector3Len(vector3 vec); + +vector3 vector3AbsVector(vector3 one); + +float vector3AngleCos(vector3 first, vector3 second); + +///!!!! VERY EXPENSIVE calculation +float vector3Angle(vector3 first, vector3 second); + +vector3 vector3Projection(vector3 one, vector3 two); + + +vector3int32 vector3Int32Less(vector3int32 one, vector3int32 two); + +vector3int32 vector3Int32Add(vector3int32 one, vector3int32 two); + +vector3int32 vector3Int32Div(vector3int32 vector, int32_t divider); + +vector3int16 vector3Int32toInt16(vector3int32 vector); + +vector3int32 vector3int32Abs(vector3int32 one); + +#endif /* VECTOR_H_ */ diff --git a/Src/vector.c b/Src/vector.c new file mode 100644 index 0000000..56d8615 --- /dev/null +++ b/Src/vector.c @@ -0,0 +1,89 @@ +/* + * vector.c + * + * Created on: Jun 1, 2021 + * Author: zemon + */ + +#include "vector.h" +#include "math.h" + +vector3 vector3Add(vector3 one, vector3 two) { + return (vector3) {one.x + two.x, one.y + two.y, one.z + two.z}; +} + +vector3 vector3Less(vector3 one, vector3 two) { + return (vector3) {one.x - two.x, one.y - two.y, one.z - two.z}; +} + +vector3 vector3DivNum(vector3 vec, float num) { + return (vector3) {vec.x / num, vec.y / num, vec.z / num}; +} + +vector3 vector3MultiplyNum(vector3 vec, float num) { + return (vector3) {vec.x * num, vec.y * num, vec.z * num}; +} + +float vector3Sum(vector3 vec) { + return vec.x + vec.y + vec.z; +} + +float vector3DotProduct(vector3 first, vector3 second) { + return first.x * second.x + first.y * second.y + first.z * second.z; +} + +float vector3LenSquare(vector3 vec) { + return vec.x * vec.x + vec.y * vec.y + vec.z * vec.z; +} + +float vector3Len(vector3 vec) { + return sqrt(vector3LenSquare(vec)); +} + + +float floatAbs(float value) { + return value >= 0 ? value : -1 * value; +} + +vector3 vector3AbsVector(vector3 one) { + return (vector3) {floatAbs(one.x), floatAbs(one.y), floatAbs(one.z)}; +} + +float vector3AngleCos(vector3 first, vector3 second) { + return vector3DotProduct(first, second) / (vector3Len(first) * vector3Len(second)); +} + +///!!!! VERY EXPENSIVE calculation +float vector3Angle(vector3 first, vector3 second) { + return acosf(vector3AngleCos(first, second)); +} + +vector3 vector3Projection(vector3 projector, vector3 receiver) { + return vector3MultiplyNum(receiver, vector3DotProduct(projector, receiver) / vector3DotProduct(receiver, receiver)); +} + + +vector3int32 vector3Int32Less(vector3int32 one, vector3int32 two) { + return (vector3int32) {one.x - two.x, one.y - two.y, one.z - two.z}; +} + +vector3int32 vector3Int32Add(vector3int32 one, vector3int32 two) { + return (vector3int32) {one.x + two.x, one.y + two.y, one.z + two.z}; +} + +vector3int32 vector3Int32Div(vector3int32 vector, int32_t divider) { + return (vector3int32) {vector.x / divider, vector.y / divider, vector.z / divider}; +} + +vector3int16 vector3Int32toInt16(vector3int32 vector) { + return (vector3int16) {vector.x, vector.y, vector.z}; +} + + +int32_t intAbs(int32_t value) { + return value >= 0 ? value : -1 * value; +} + +vector3int32 vector3int32Abs(vector3int32 one) { + return (vector3int32) {intAbs(one.x), intAbs(one.y), intAbs(one.z)}; +} diff --git a/modular.json b/modular.json new file mode 100644 index 0000000..d4d574e --- /dev/null +++ b/modular.json @@ -0,0 +1,12 @@ +{ + "dep": [ + ], + "cmake": { + "inc_dirs": [ + "Inc" + ], + "srcs": [ + "Src/**.c" + ] + } +} \ No newline at end of file