几何的向量计算模板

double add(double a, double b)
{
    if (abs(a + b) < 1e-10*(abs(a) + abs(b))) return 0;
    else return a + b;
}
struct P
{
    double x;
    double y;
    P() {}
    P(double a, double b)
    {
        x = a;
        y = b;
    }
    double det(P a)
    {
        return add(x*a.y, -y*a.x);
    }
    double dot(P a)
    {
        return add(x*a.x, y*a.y);
    }
    P operator+(P p)
    {
        return P(add(p.x, x), add(p.y, y));
    }
    P operator-(P p)
    {
        return P(add(x, -p.x), add(y, -p.y));
    }
    P operator*(double a)
    {
        return P(a*x, a*y);
    }
};
原文地址:https://www.cnblogs.com/jaszzz/p/13072751.html