版权声明:博主的博客不值钱随便转载但要注明出处 https://blog.csdn.net/easylovecsdn/article/details/86602265
#include <bits/stdc++.h>
#define EPS (1e-10)
#define equals(a, b) (fabs((a) - (b)) < EPS)
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)
using namespace std;
class Point {
public:
double x, y;
Point(double x = 0, double y = 0) : x(x), y(y) {}
Point operator + (Point p) { return Point(x + p.x, y + p.y); }
Point operator - (Point p) { return Point(x - p.x, y - p.y); }
Point operator * (double a) { return Point(a * x, a * y); } //数乘
Point operator / (double a) { return Point(x / a, y / a); }
double abs() { return sqrt(norm()); }
double norm() { return x * x + y * y; }
bool operator < (const Point &p) const {
return x != p.x ? x < p.x : y < p.y;
}
bool operator == (const Point &p) const {
return fabs(x - p.x) < EPS && fabs(y - p.y) < EPS;
}
};
typedef Point Vector;
double dot(Vector a, Vector b) { //内积(向量点乘)
return a.x * b.x + a.y * b.y;
}
double cross(Vector a, Vector b) { //外积(向量叉乘)
return a.x * b.y - a.y * b.x;
}
bool isorl(Vector a, Vector b) { //正交
return equals(dot(a, b), 0.0);
}
bool ispal(Vector a, Vector b) { //平行
return equals(cross(a, b), 0.0);
}
Point project(Point a, Point b, Point c) //投影点
{
Vector h = b - a;
Vector bas = c - a;
double r = dot(bas, h) / h.norm();
return a + h * r;
}
Point reflect(Point a, Point b, Point c) { //映像点
return c + (project(a, b, c) - c) * 2;
}
double getDistanceLP(Point a, Point b, Point p) { //点线距(直线)
return cross(b - a, p - a) / (b - a).abs();
}
double getDistanceSP(Point a, Point b, Point p) //点线距(线段)
{
if (dot(b - a, p - a) < 0.0) return (p - a).abs();
if (dot(a - b, p - b) < 0.0) return (p - b).abs();
return getDistanceLP(a, b, p);
}
bool intersect(Point a, Point b, Point c, Point d) //判断是否相交
{
return false;
}
double getDistance(Point a, Point b, Point c, Point d) //线线距
{
if (intersect(a, b, c, d)) return 0.0;
return min(getDistanceSP(a, b, c), min(getDistanceSP(a, b, d), min(getDistanceSP(c, d, a), getDistanceSP(c, d, b))));
}
int ccw(Point a, Point b, Point p) //逆时针方向
{
Vector v1 = b - a;
Vector v2 = p - a;
if (cross(v1, v2) > EPS) return 1;
if (cross(v1, v2) < -EPS) return -1;
if (dot(v1, v2) < -EPS) return 2;
if (v1.norm() < v2.norm()) return -2;
return 0;
}
int main()
{
return 0;
}