From 3dc9070909208a9214b36766f3772a9de526cef3 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Wed, 30 May 2018 23:35:59 +0300 Subject: [PATCH] squared distance for vec3 --- docs/source/vec3.rst | 12 ++++++++++++ include/cglm/call/vec3.h | 4 ++++ include/cglm/vec3.h | 19 ++++++++++++++++--- src/vec3.c | 6 ++++++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/docs/source/vec3.rst b/docs/source/vec3.rst index fcbfbfb..e4a2746 100644 --- a/docs/source/vec3.rst +++ b/docs/source/vec3.rst @@ -56,6 +56,7 @@ Functions: #. :c:func:`glm_vec_inv_to` #. :c:func:`glm_vec_normalize` #. :c:func:`glm_vec_normalize_to` +#. :c:func:`glm_vec_distance2` #. :c:func:`glm_vec_distance` #. :c:func:`glm_vec_angle` #. :c:func:`glm_vec_rotate` @@ -366,6 +367,17 @@ Functions documentation | *[in]* **v2** vector2 | *[out]* **dest** center point +.. c:function:: float glm_vec_distance2(vec3 v1, vec3 v2) + + squared distance between two vectors + + Parameters: + | *[in]* **mat** vector1 + | *[in]* **row1** vector2 + + Returns: + | squared distance (distance * distance) + .. c:function:: float glm_vec_distance(vec3 v1, vec3 v2) distance between two vectors diff --git a/include/cglm/call/vec3.h b/include/cglm/call/vec3.h index 50a6b22..ae21620 100644 --- a/include/cglm/call/vec3.h +++ b/include/cglm/call/vec3.h @@ -148,6 +148,10 @@ CGLM_EXPORT void glmc_vec_center(vec3 v1, vec3 v2, vec3 dest); +CGLM_EXPORT +float +glmc_vec_distance2(vec3 v1, vec3 v2); + CGLM_EXPORT float glmc_vec_distance(vec3 v1, vec3 v2); diff --git a/include/cglm/vec3.h b/include/cglm/vec3.h index 34a910c..18d8a7b 100644 --- a/include/cglm/vec3.h +++ b/include/cglm/vec3.h @@ -633,6 +633,21 @@ glm_vec_center(vec3 v1, vec3 v2, vec3 dest) { glm_vec_scale(dest, 0.5f, dest); } +/** + * @brief squared distance between two vectors + * + * @param[in] v1 vector1 + * @param[in] v2 vector2 + * @return returns squared distance (distance * distance) + */ +CGLM_INLINE +float +glm_vec_distance2(vec3 v1, vec3 v2) { + return glm_pow2(v2[0] - v1[0]) + + glm_pow2(v2[1] - v1[1]) + + glm_pow2(v2[2] - v1[2]); +} + /** * @brief distance between two vectors * @@ -643,9 +658,7 @@ glm_vec_center(vec3 v1, vec3 v2, vec3 dest) { CGLM_INLINE float glm_vec_distance(vec3 v1, vec3 v2) { - return sqrtf(glm_pow2(v2[0] - v1[0]) - + glm_pow2(v2[1] - v1[1]) - + glm_pow2(v2[2] - v1[2])); + return sqrtf(glm_vec_distance2(v1, v2)); } /*! diff --git a/src/vec3.c b/src/vec3.c index 401b983..a2ab499 100644 --- a/src/vec3.c +++ b/src/vec3.c @@ -206,6 +206,12 @@ glmc_vec_center(vec3 v1, vec3 v2, vec3 dest) { glm_vec_center(v1, v2, dest); } +CGLM_EXPORT +float +glmc_vec_distance2(vec3 v1, vec3 v2) { + return glm_vec_distance2(v1, v2); +} + CGLM_EXPORT float glmc_vec_distance(vec3 v1, vec3 v2) {