From 43ce51a386489931924dabbf0c059f7124fa5c83 Mon Sep 17 00:00:00 2001 From: Andrey Pokidov Date: Thu, 25 Dec 2025 02:55:10 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BC=D0=BE=D1=82=D0=BE=D1=80=D0=BE=D0=B2,=20=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + butis/butis.vcxproj | 2 - butis/butis.vcxproj.filters | 6 -- butis/motor.c | 24 ++++++ butis/motor.h | 168 ++++++++++++++++++++++++++++++++++++ butis/screw.c | 4 - butis/screw.h | 48 ----------- 7 files changed, 193 insertions(+), 60 deletions(-) delete mode 100644 butis/screw.c delete mode 100644 butis/screw.h diff --git a/.gitignore b/.gitignore index 18bf290..9ed6556 100644 --- a/.gitignore +++ b/.gitignore @@ -48,6 +48,7 @@ *.cmd .tmp_versions/ .vs +basic-geometry x64 x86 Debug diff --git a/butis/butis.vcxproj b/butis/butis.vcxproj index 9f0ebf2..7120f0e 100644 --- a/butis/butis.vcxproj +++ b/butis/butis.vcxproj @@ -162,13 +162,11 @@ - - diff --git a/butis/butis.vcxproj.filters b/butis/butis.vcxproj.filters index b5a0706..2aa370c 100644 --- a/butis/butis.vcxproj.filters +++ b/butis/butis.vcxproj.filters @@ -24,9 +24,6 @@ Файлы заголовков - - Файлы заголовков - @@ -38,8 +35,5 @@ Исходные файлы - - Исходные файлы - \ No newline at end of file diff --git a/butis/motor.c b/butis/motor.c index c007cb3..ac58a12 100644 --- a/butis/motor.c +++ b/butis/motor.c @@ -3,6 +3,12 @@ extern inline void bt_motor_reset_fp32(BtMotorFP32* motor); extern inline void bt_motor_reset_fp64(BtMotorFP64* motor); +extern inline void bt_motor_reset_at_point_fp32(const BgcVector3FP32* point, BtMotorFP32* motor); +extern inline void bt_motor_reset_at_point_fp64(const BgcVector3FP64* point, BtMotorFP64* motor); + +extern inline void bt_motor_reset_with_values_fp32(const float x1, const float x2, const float x3, BtMotorFP32* motor); +extern inline void bt_motor_reset_with_values_fp64(const double x1, const double x2, const double x3, BtMotorFP64* motor); + extern inline void bt_motor_copy_fp32(const BtMotorFP32* source, BtMotorFP32* destination); extern inline void bt_motor_copy_fp64(const BtMotorFP64* source, BtMotorFP64* destination); @@ -24,6 +30,24 @@ extern inline void bt_motor_multiply_at_number_fp64(const BtMotorFP64* multiplic extern inline void bt_motor_divide_at_number_fp32(const BtMotorFP32* divident, const float divisor, BtMotorFP32* quotient); extern inline void bt_motor_divide_at_number_fp64(const BtMotorFP64* divident, const double divisor, BtMotorFP64* quotient); +extern inline void bt_motor_add_vector_fp32(const BgcVector3FP32* point, const BgcVector3FP32* vector, BtMotorFP32* sum); +extern inline void bt_motor_add_vector_fp64(const BgcVector3FP64* point, const BgcVector3FP64* vector, BtMotorFP64* sum); + +extern inline void bt_motor_add_motor_fp32(const BtMotorFP32* motor, BtMotorFP32* sum); +extern inline void bt_motor_add_motor_fp64(const BtMotorFP64* motor, BtMotorFP64* sum); + +extern inline void bt_motor_add_scaled_vector_fp32(const BgcVector3FP32* point, const BgcVector3FP32* vector, const float scale, BtMotorFP32* sum); +extern inline void bt_motor_add_scaled_vector_fp64(const BgcVector3FP64* point, const BgcVector3FP64* vector, const double scale, BtMotorFP64* sum); + +extern inline void bt_motor_subtract_vector_fp32(const BgcVector3FP32* point, const BgcVector3FP32* vector, BtMotorFP32* difference); +extern inline void bt_motor_subtract_vector_fp64(const BgcVector3FP64* point, const BgcVector3FP64* vector, BtMotorFP64* difference); + +extern inline void bt_motor_subtract_scaled_vector_fp32(const BgcVector3FP32* point, const BgcVector3FP32* vector, const float scale, BtMotorFP32* difference); +extern inline void bt_motor_subtract_scaled_vector_fp64(const BgcVector3FP64* point, const BgcVector3FP64* vector, const double scale, BtMotorFP64* differences); + +extern inline int bt_motor_is_vector_fp32(const BtMotorFP32* motor); +extern inline int bt_motor_is_vector_fp64(const BtMotorFP64* motor); + extern inline int bt_motor_is_screw_fp32(const BtMotorFP32* motor); extern inline int bt_motor_is_screw_fp64(const BtMotorFP64* motor); diff --git a/butis/motor.h b/butis/motor.h index e7779f1..8fb6ba2 100644 --- a/butis/motor.h +++ b/butis/motor.h @@ -29,6 +29,38 @@ inline void bt_motor_reset_fp64(BtMotorFP64* motor) bgc_vector3_reset_fp64(&motor->momentum); } +// =============== Reset At Point =============== // + +inline void bt_motor_reset_at_point_fp32(const BgcVector3FP32* point, BtMotorFP32* motor) +{ + bgc_vector3_copy_fp32(point, &motor->point); + bgc_vector3_reset_fp32(&motor->vector); + bgc_vector3_reset_fp32(&motor->momentum); +} + +inline void bt_motor_reset_at_point_fp64(const BgcVector3FP64* point, BtMotorFP64* motor) +{ + bgc_vector3_copy_fp64(point, &motor->point); + bgc_vector3_reset_fp64(&motor->vector); + bgc_vector3_reset_fp64(&motor->momentum); +} + +// ============== Reset At Values =============== // + +inline void bt_motor_reset_with_values_fp32(const float x1, const float x2, const float x3, BtMotorFP32* motor) +{ + bgc_vector3_set_values_fp32(x1, x2, x3, &motor->point); + bgc_vector3_reset_fp32(&motor->vector); + bgc_vector3_reset_fp32(&motor->momentum); +} + +inline void bt_motor_reset_with_values_fp64(const double x1, const double x2, const double x3, BtMotorFP64* motor) +{ + bgc_vector3_set_values_fp64(x1, x2, x3, &motor->point); + bgc_vector3_reset_fp64(&motor->vector); + bgc_vector3_reset_fp64(&motor->momentum); +} + // ==================== Copy ==================== // inline void bt_motor_copy_fp32(const BtMotorFP32* source, BtMotorFP32* destination) @@ -149,6 +181,142 @@ inline void bt_motor_divide_at_number_fp64(const BtMotorFP64* divident, const do bt_motor_multiply_at_number_fp64(divident, 1.0 / divisor, quotient); } +// ==================== Add ===================== // + +inline void bt_motor_add_vector_fp32(const BgcVector3FP32* point, const BgcVector3FP32* vector, BtMotorFP32* sum) +{ + BgcVector3FP32 distance, momentum; + + bgc_vector3_subtract_fp32(point, &sum->point, &distance); + bgc_vector3_get_cross_product_fp32(&distance, vector, &momentum); + + bgc_vector3_add_fp32(&sum->vector, vector, &sum->vector); + bgc_vector3_add_fp32(&sum->momentum, &momentum, &sum->momentum); +} + +inline void bt_motor_add_vector_fp64(const BgcVector3FP64* point, const BgcVector3FP64* vector, BtMotorFP64* sum) +{ + BgcVector3FP64 distance, momentum; + + bgc_vector3_subtract_fp64(point, &sum->point, &distance); + bgc_vector3_get_cross_product_fp64(&distance, vector, &momentum); + + bgc_vector3_add_fp64(&sum->vector, vector, &sum->vector); + bgc_vector3_add_fp64(&sum->momentum, &momentum, &sum->momentum); +} + +// ================= Add Motor ================== // + +inline void bt_motor_add_motor_fp32(const BtMotorFP32* motor, BtMotorFP32* sum) +{ + BgcVector3FP32 distance, momentum; + + bgc_vector3_subtract_fp32(&motor->point, &sum->point, &distance); + bgc_vector3_get_cross_product_fp32(&distance, &motor->vector, &momentum); + + bgc_vector3_add_fp32(&momentum, &motor->vector, &momentum); + + bgc_vector3_add_fp32(&sum->vector, &motor->vector, &sum->vector); + bgc_vector3_add_fp32(&sum->momentum, &momentum, &sum->momentum); +} + +inline void bt_motor_add_motor_fp64(const BtMotorFP64* motor, BtMotorFP64* sum) +{ + BgcVector3FP64 distance, momentum; + + bgc_vector3_subtract_fp64(&motor->point, &sum->point, &distance); + bgc_vector3_get_cross_product_fp64(&distance, &motor->vector, &momentum); + + bgc_vector3_add_fp64(&momentum, &motor->vector, &momentum); + + bgc_vector3_add_fp64(&sum->vector, &motor->vector, &sum->vector); + bgc_vector3_add_fp64(&sum->momentum, &momentum, &sum->momentum); +} + +// ================= Add Scaled ================= // + +inline void bt_motor_add_scaled_vector_fp32(const BgcVector3FP32* point, const BgcVector3FP32* vector, const float scale, BtMotorFP32* sum) +{ + BgcVector3FP32 distance, momentum; + + bgc_vector3_subtract_fp32(point, &sum->point, &distance); + bgc_vector3_get_cross_product_fp32(&distance, vector, &momentum); + + bgc_vector3_add_scaled_fp32(&sum->vector, vector, scale, &sum->vector); + bgc_vector3_add_scaled_fp32(&sum->momentum, &momentum, scale, &sum->momentum); +} + +inline void bt_motor_add_scaled_vector_fp64(const BgcVector3FP64* point, const BgcVector3FP64* vector, const double scale, BtMotorFP64* sum) +{ + BgcVector3FP64 distance, momentum; + + bgc_vector3_subtract_fp64(point, &sum->point, &distance); + bgc_vector3_get_cross_product_fp64(&distance, vector, &momentum); + + bgc_vector3_add_scaled_fp64(&sum->vector, vector, scale, &sum->vector); + bgc_vector3_add_scaled_fp64(&sum->momentum, &momentum, scale, &sum->momentum); +} + +// ================== Subtract ================== // + +inline void bt_motor_subtract_vector_fp32(const BgcVector3FP32* point, const BgcVector3FP32* vector, BtMotorFP32* difference) +{ + BgcVector3FP32 distance, momentum; + + bgc_vector3_subtract_fp32(point, &difference->point, &distance); + bgc_vector3_get_cross_product_fp32(&distance, vector, &momentum); + + bgc_vector3_subtract_fp32(&difference->vector, vector, &difference->vector); + bgc_vector3_subtract_fp32(&difference->momentum, &momentum, &difference->momentum); +} + +inline void bt_motor_subtract_vector_fp64(const BgcVector3FP64* point, const BgcVector3FP64* vector, BtMotorFP64* difference) +{ + BgcVector3FP64 distance, momentum; + + bgc_vector3_subtract_fp64(point, &difference->point, &distance); + bgc_vector3_get_cross_product_fp64(&distance, vector, &momentum); + + bgc_vector3_subtract_fp64(&difference->vector, vector, &difference->vector); + bgc_vector3_subtract_fp64(&difference->momentum, &momentum, &difference->momentum); +} + +// ============== Subtract Scaled =============== // + +inline void bt_motor_subtract_scaled_vector_fp32(const BgcVector3FP32* point, const BgcVector3FP32* vector, const float scale, BtMotorFP32* motor) +{ + BgcVector3FP32 distance, momentum; + + bgc_vector3_subtract_fp32(point, &motor->point, &distance); + bgc_vector3_get_cross_product_fp32(&distance, vector, &momentum); + + bgc_vector3_subtract_scaled_fp32(&motor->vector, vector, scale, &motor->vector); + bgc_vector3_subtract_scaled_fp32(&motor->momentum, &momentum, scale, &motor->momentum); +} + +inline void bt_motor_subtract_scaled_vector_fp64(const BgcVector3FP64* point, const BgcVector3FP64* vector, const double scale, BtMotorFP64* motor) +{ + BgcVector3FP64 distance, momentum; + + bgc_vector3_subtract_fp64(point, &motor->point, &distance); + bgc_vector3_get_cross_product_fp64(&distance, vector, &momentum); + + bgc_vector3_subtract_scaled_fp64(&motor->vector, vector, scale, &motor->vector); + bgc_vector3_subtract_scaled_fp64(&motor->momentum, &momentum, scale, &motor->momentum); +} + +// ================= Is Vector ================== // + +inline int bt_motor_is_vector_fp32(const BtMotorFP32* motor) +{ + return bgc_vector3_are_orthogonal_fp32(&motor->vector, &motor->momentum); +} + +inline int bt_motor_is_vector_fp64(const BtMotorFP64* motor) +{ + return bgc_vector3_are_orthogonal_fp64(&motor->vector, &motor->momentum); +} + // ================== Is Screw ================== // inline int bt_motor_is_screw_fp32(const BtMotorFP32* motor) diff --git a/butis/screw.c b/butis/screw.c deleted file mode 100644 index 8036959..0000000 --- a/butis/screw.c +++ /dev/null @@ -1,4 +0,0 @@ -#include "screw.h" - -extern inline void bt_screw_reset_fp32(BtScrewFP32* screw); -extern inline void bt_screw_reset_fp64(BtScrewFP64* screw); diff --git a/butis/screw.h b/butis/screw.h deleted file mode 100644 index f140543..0000000 --- a/butis/screw.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef _BUTIS_SCREW_H_INCLUDE_ -#define _BUTIS_SCREW_H_INCLUDE_ - -#include - -// =================== Types ==================== // - -typedef struct { - BgcVector3FP32 point, direction; - float value, momentum; -} BtScrewFP32; - -typedef struct { - BgcVector3FP64 point, direction; - double value, momentum; -} BtScrewFP64; - -// =================== Reset ==================== // - -inline void bt_screw_reset_fp32(BtScrewFP32* screw) -{ - screw->point.x1 = 0.0f; - screw->point.x2 = 0.0f; - screw->point.x3 = 0.0f; - - screw->direction.x1 = 1.0f; - screw->direction.x2 = 0.0f; - screw->direction.x3 = 0.0f; - - screw->value = 0.0f; - screw->momentum = 0.0f; -} - -inline void bt_screw_reset_fp64(BtScrewFP64* screw) -{ - screw->point.x1 = 0.0; - screw->point.x2 = 0.0; - screw->point.x3 = 0.0; - - screw->direction.x1 = 1.0; - screw->direction.x2 = 0.0; - screw->direction.x3 = 0.0; - - screw->value = 0.0f; - screw->momentum = 0.0f; -} - -#endif