mirror of
https://github.com/recp/cglm.git
synced 2025-10-03 16:51:35 +00:00
vec: improve angle between two vector
* because `acosf()` may return NaN if cosine/dot is out of range
This commit is contained in:
@@ -548,11 +548,18 @@ glm_vec_normalize_to(vec3 vec, vec3 dest) {
|
||||
CGLM_INLINE
|
||||
float
|
||||
glm_vec_angle(vec3 v1, vec3 v2) {
|
||||
float norm;
|
||||
float norm, dot;
|
||||
|
||||
/* maybe compiler generate approximation instruction (rcp) */
|
||||
norm = 1.0f / (glm_vec_norm(v1) * glm_vec_norm(v2));
|
||||
return acosf(glm_vec_dot(v1, v2) * norm);
|
||||
dot = glm_vec_dot(v1, v2) * norm;
|
||||
|
||||
if (dot > 1.0f)
|
||||
return 0.0f;
|
||||
else if (dot < -1.0f)
|
||||
return CGLM_PI;
|
||||
|
||||
return acosf(dot);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
Reference in New Issue
Block a user