From e7ba1ad21848b71a03b77dab1e508548b5150a64 Mon Sep 17 00:00:00 2001 From: Andrey Pokidov <9942846+Morgend@users.noreply.github.com> Date: Wed, 19 Feb 2025 15:02:45 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=BC=D0=B8=D0=BD=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=B8=20=D0=BC=D0=B0=D0=BA=D1=81=D0=B8=D0=BC?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=B2=D0=B5=D0=BA=D1=82=D0=BE=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- basic-geometry/vector2.c | 6 ++++ basic-geometry/vector2.h | 48 ++++++++++++++++++++++++++++++ basic-geometry/vector3.c | 6 ++++ basic-geometry/vector3.h | 64 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 124 insertions(+) diff --git a/basic-geometry/vector2.c b/basic-geometry/vector2.c index 348acf9..6372a18 100644 --- a/basic-geometry/vector2.c +++ b/basic-geometry/vector2.c @@ -62,6 +62,12 @@ extern inline void bgc_vector2_mean_of_two_fp64(const BgcVector2FP64* vector1, c extern inline void bgc_vector2_mean_of_three_fp32(const BgcVector2FP32* vector1, const BgcVector2FP32* vector2, const BgcVector2FP32* vector3, BgcVector2FP32* mean); extern inline void bgc_vector2_mean_of_three_fp64(const BgcVector2FP64* vector1, const BgcVector2FP64* vector2, const BgcVector2FP64* vector3, BgcVector2FP64* mean); + +extern inline void bgc_vector2_minimize_fp32(const BgcVector2FP32* vector, BgcVector2FP32* minimal); +extern inline void bgc_vector2_minimize_fp64(const BgcVector2FP64* vector, BgcVector2FP64* minimal); + +extern inline void bgc_vector2_maximize_fp32(const BgcVector2FP32* vector, BgcVector2FP32* maximal); +extern inline void bgc_vector2_maximize_fp64(const BgcVector2FP64* vector, BgcVector2FP64* maximal); extern inline float bgc_vector2_scalar_product_fp32(const BgcVector2FP32* vector1, const BgcVector2FP32* vector2); extern inline double bgc_vector2_scalar_product_fp64(const BgcVector2FP64* vector1, const BgcVector2FP64* vector2); diff --git a/basic-geometry/vector2.h b/basic-geometry/vector2.h index f603227..5fa8592 100644 --- a/basic-geometry/vector2.h +++ b/basic-geometry/vector2.h @@ -366,6 +366,54 @@ inline void bgc_vector2_mean_of_three_fp64(const BgcVector2FP64* vector1, const mean->x2 = (vector1->x2 + vector2->x2 + vector3->x2) * BGC_ONE_THIRD_FP64; } +// ================== Minimal =================== // + +inline void bgc_vector2_minimize_fp32(const BgcVector2FP32* vector, BgcVector2FP32* minimal) +{ + if (vector->x1 < minimal->x1) { + minimal->x1 = vector->x1; + } + + if (vector->x2 < minimal->x2) { + minimal->x2 = vector->x2; + } +} + +inline void bgc_vector2_minimize_fp64(const BgcVector2FP64* vector, BgcVector2FP64* minimal) +{ + if (vector->x1 < minimal->x1) { + minimal->x1 = vector->x1; + } + + if (vector->x2 < minimal->x2) { + minimal->x2 = vector->x2; + } +} + +// ================== Maximal =================== // + +inline void bgc_vector2_maximize_fp32(const BgcVector2FP32* vector, BgcVector2FP32* maximal) +{ + if (vector->x1 > maximal->x1) { + maximal->x1 = vector->x1; + } + + if (vector->x2 > maximal->x2) { + maximal->x2 = vector->x2; + } +} + +inline void bgc_vector2_maximize_fp64(const BgcVector2FP64* vector, BgcVector2FP64* maximal) +{ + if (vector->x1 > maximal->x1) { + maximal->x1 = vector->x1; + } + + if (vector->x2 > maximal->x2) { + maximal->x2 = vector->x2; + } +} + // =============== Scalar Product =============== // inline float bgc_vector2_scalar_product_fp32(const BgcVector2FP32* vector1, const BgcVector2FP32* vector2) diff --git a/basic-geometry/vector3.c b/basic-geometry/vector3.c index ebcc698..3719cf0 100644 --- a/basic-geometry/vector3.c +++ b/basic-geometry/vector3.c @@ -63,6 +63,12 @@ extern inline void bgc_vector3_mean_of_two_fp64(const BgcVector3FP64* vector1, c extern inline void bgc_vector3_mean_of_three_fp32(const BgcVector3FP32* vector1, const BgcVector3FP32* vector2, const BgcVector3FP32* vector3, BgcVector3FP32* result); extern inline void bgc_vector3_mean_of_three_fp64(const BgcVector3FP64* vector1, const BgcVector3FP64* vector2, const BgcVector3FP64* vector3, BgcVector3FP64* result); +extern inline void bgc_vector3_minimize_fp32(const BgcVector3FP32* vector, BgcVector3FP32* minimal); +extern inline void bgc_vector3_minimize_fp64(const BgcVector3FP64* vector, BgcVector3FP64* minimal); + +extern inline void bgc_vector3_maximize_fp32(const BgcVector3FP32* vector, BgcVector3FP32* maximal); +extern inline void bgc_vector3_maximize_fp64(const BgcVector3FP64* vector, BgcVector3FP64* maximal); + extern inline float bgc_vector3_scalar_product_fp32(const BgcVector3FP32* vector1, const BgcVector3FP32* vector2); extern inline double bgc_vector3_scalar_product_fp64(const BgcVector3FP64* vector1, const BgcVector3FP64* vector2); diff --git a/basic-geometry/vector3.h b/basic-geometry/vector3.h index 8dfeda1..b5b7585 100644 --- a/basic-geometry/vector3.h +++ b/basic-geometry/vector3.h @@ -378,6 +378,70 @@ inline void bgc_vector3_mean_of_three_fp64(const BgcVector3FP64* vector1, const result->x3 = (vector1->x3 + vector2->x3 + vector3->x3) * BGC_ONE_THIRD_FP64; } +// ================== Minimal =================== // + +inline void bgc_vector3_minimize_fp32(const BgcVector3FP32* vector, BgcVector3FP32* minimal) +{ + if (vector->x1 < minimal->x1) { + minimal->x1 = vector->x1; + } + + if (vector->x2 < minimal->x2) { + minimal->x2 = vector->x2; + } + + if (vector->x3 < minimal->x3) { + minimal->x3 = vector->x3; + } +} + +inline void bgc_vector3_minimize_fp64(const BgcVector3FP64* vector, BgcVector3FP64* minimal) +{ + if (vector->x1 < minimal->x1) { + minimal->x1 = vector->x1; + } + + if (vector->x2 < minimal->x2) { + minimal->x2 = vector->x2; + } + + if (vector->x3 < minimal->x3) { + minimal->x3 = vector->x3; + } +} + +// ================== Maximal =================== // + +inline void bgc_vector3_maximize_fp32(const BgcVector3FP32* vector, BgcVector3FP32* maximal) +{ + if (vector->x1 > maximal->x1) { + maximal->x1 = vector->x1; + } + + if (vector->x2 > maximal->x2) { + maximal->x2 = vector->x2; + } + + if (vector->x3 > minimal->x3) { + minimal->x3 = vector->x3; + } +} + +inline void bgc_vector3_maximize_fp64(const BgcVector3FP64* vector, BgcVector3FP64* maximal) +{ + if (vector->x1 > maximal->x1) { + maximal->x1 = vector->x1; + } + + if (vector->x2 > maximal->x2) { + maximal->x2 = vector->x2; + } + + if (vector->x3 > minimal->x3) { + minimal->x3 = vector->x3; + } +} + // =============== Scalar Product =============== // inline float bgc_vector3_scalar_product_fp32(const BgcVector3FP32* vector1, const BgcVector3FP32* vector2)