#include #include "mathutils.h" #include "2darith.h" double xylength(XY v) { return(hypot(v.x,v.y)); } double dot2(XY a, XY b) { return((a.x*b.x)+(a.y*b.y)); } XY xyscale(XY v, double s) { return((XY){v.x*s,v.y*s}); } XY xysub(XY a, XY b) { return((XY){a.x-b.x,a.y-b.y}); } XY xyadd(XY a, XY b) { return((XY){a.x+b.x,a.y+b.y}); } XY xyunit(XY v) { return(xyscale(v,1/xylength(v))); } XY xyrotate(XY v, double a) { double s; double c; s = sindeg(a); c = cosdeg(a); return((XY) { (v.x * c) - (v.y * s), (v.y * c) + (v.x * s) }); } XY xyrotatecw(XY v) { return((XY){v.y,-v.x}); } XY xyrotateccw(XY v) { return((XY){-v.y,v.x}); } XY xy_subtract_component(XY v, XY u) { return(xysub(v,xyscale(u,dot2(v,u)))); } XY xyblend(XY a, double f, XY b) { return( (XY) { ((1-f) * a.x) + (f * b.x), ((1-f) * a.y) + (f * b.y) } ); } double zcross(XY a, XY b) { return((a.x*b.y)-(a.y*b.x)); }