#include #include #include Point2 point2(double x, double y) { Point2 p; p.x = x; p.y = y; return p; } Point2 padd2(Point2 p1, Point2 p2) { Point2 p; p.x = p1.x + p2.x; p.y = p1.y + p2.y; return p; } Point2 psub2(Point2 p1, Point2 p2) { Point2 p; p.x = p1.x - p2.x; p.y = p1.y - p2.y; return p; } Point2 pmul2(double s, Point2 p) { p.x *= s; p.y *= s; return p; } Point2 pmax2(Point2 p1, Point2 p2) { Point2 p; if (p1.x > p2.x) p.x = p1.x; else p.x = p2.x; if (p1.y > p2.y) p.y = p1.y; else p.y = p2.y; return p; } Point2 pmin2(Point2 p1, Point2 p2) { Point2 p; if (p1.x < p2.x) p.x = p1.x; else p.x = p2.x; if (p1.y < p2.y) p.y = p1.y; else p.y = p2.y; return p; } int peq2(Point2 p1, Point2 p2) { return (p1.x == p2.x && p1.y == p2.y); } double pdot2(Point2 p0, Point2 p1) { double r; r = p0.x*p1.x + p0.y*p1.y; return r; } Point2 pmid2(double s, Point2 p0, Point2 p1) { Point2 p; p.x = p0.x + s*(p1.x - p0.x); p.y = p0.y + s*(p1.y - p0.y); return p; } double pabs2(Point2 p) { return sqrt(p.x*p.x + p.y*p.y); } Point2 prand2(void) { Point2 p; p.x = frand(); p.y = frand(); return p; } Point2 punit2(Point2 p) { double r; r = sqrt(p.x*p.x+p.y*p.y); if (r == 0) return point2(1.0, 0.0); r = 1.0/r; p.x *= r; p.y *= r; return p; }