/* Written by Sui Huang, McMaster University at Mar 3, 2007 */ #include "VectorAdtPlus.h" #include #include float get_magnitude(Vector v){ float scale, tmp_x, tmp_y; tmp_x = get_x(v); tmp_y = get_y(v); if (fabs(tmp_x)>fabs(tmp_y)){ scale = fabs(tmp_x); }else{ scale = fabs(tmp_y); } if (scale==0){ return 0; }else{ tmp_x = tmp_x/scale; tmp_y = tmp_y/scale; return scale*sqrt(tmp_x*tmp_x+tmp_y*tmp_y); } } float get_angle(Vector v){ return atan2(get_y(v),get_x(v)); } Vector zero_vector(){ return mul(0, i_vector()); } bool is_orthogonal(Vector u, Vector v){ float dot_product; float scale, ux, uy, vx, vy; ux = get_x(u); uy = get_y(u); vx = get_x(v); vy = get_y(v); scale = (abs(ux)>abs(uy))?abs(ux):abs(uy); scale = (scale>abs(vx))?scale:abs(vx); scale = (scale>abs(vy))?scale:abs(vy); if (scale==0){ return true; }else { ux = ux/scale; uy = uy/scale; vx = vx/scale; vy = vy/scale; dot_product = ux*vx+uy*vy; if (dot_product==0){ return true; }else{ return false; } } }