utility
|
cmd_head.c,
count_tokens.c,
cp_file.c,
errmsg.c,
file_opened.c,
find_line.c,
find_string.c,
fn_base.c,
fn_dir.c,
fn_ext.c,
fn_root.c,
gchoice.c,
gdata_line.c,
gdouble.c,
gfield.c,
gint.c,
gntoken.c,
graphics_ok.c,
gstring.c,
lock.c,
lower.c,
mat_multiply.c,
mat_transform.c,
mat_transpose.c,
mv_file.c,
new_extension.c,
nolead.c,
notrail.c,
ordinal.c,
pfield.c,
squish_blanks.c,
test.c,
unlock.c,
upper.c,
utility.h,
utility.make,
valchars.c,
vec_angle.c,
vec_crossprod.c,
vec_diff.c,
vec_dotprod.c,
vec_length.c,
vec_norm.c,
|
|
|
#include "utility.h"
double vec_angle(vector1,vector2)
/*============================================================================*/
/* PURPOSE: CALCULATE THE ANGLE BEWTEEN TWO VECTORS. IF EITHER VECTOR HAS
/* ZERO LENGTH, THE RETURNED ANGLE IS -1.
/* INPUTS:
/* VECTOR1 (X,Y,Z) TRIPLET.
/* VECTOR2 (X,Y,Z) TRIPLET.
/* OUTPUTS:
/* FUNCTION VALUE ANGLE IN DEGREES (0-180) BETWEEN VECTOR1 AND VECTOR2.
/* WRITTEN: M.V.GRIESHABER
/* LAST MODIFICATION: 11 JUNE 1991 MVG
*/
double vector1[3];
double vector2[3];
{
double length1;
double length2;
double cos_theta;
/* COMPUTE THE LENGTH OF EACH VECTOR. */
length1=vec_length(vector1);
length2=vec_length(vector2);
if (length1==0.0 || length2==0.0) return(-1.0);
/* COMPUTE THE COSINE OF THE INCLUDED ANGLE. */
cos_theta=vec_dotprod(vector1,vector2) / (length1*length2);
/* GUARD AGAINST THRESHHOLD INACCURACY. */
if (cos_theta > 1.0) cos_theta=1.0;
else if (cos_theta < -1.0) cos_theta= -1.0;
return(acos(cos_theta)*DEGREES_PER_RADIAN);
}
|