首页 > 其他 > 详细

几何常用

时间:2020-07-16 10:57:14      阅读:45      评论:0      收藏:0      [点我收藏+]

叉乘,点乘,用结构体存cos^2

int n, ans = 1, X[N], Y[N];

struct node
{
    double x,y;
    node(): node(0,0){}
    node(double x,double y):x(x),y(y){}
    bool operator < (const node& r)
    {
        return (double)x*r.y<(double)y*r.x;
    }
    bool operator == (const node& r)
    {
        return (double)x*r.y==(double)y*r.x;
    }
};

int Cross(int lhs, int rhs)
{
    return X[lhs] * Y[rhs] - X[rhs] * Y[lhs];
}

int Dot(int lhs, int rhs)
{
    return X[lhs] * X[rhs] + Y[lhs] * Y[rhs];
}

double Dis2(int lhs, int rhs)
{
    double dx = X[lhs] - X[rhs], dy = Y[lhs] - Y[rhs];
    return dx * dx + dy * dy;
}

int Sgn(int x)
{
    if (x > 0) return 1;
    if (x < 0) return -1;
    return 0;
}

node ar[N];

node cos2(ll x, ll y)
{
    ll a2=Dis2(0,x),b2=Dis2(x,y),c2=Dis2(0,y);
    int sgn=Sgn(b2+c2-a2);
    return node((double)1*sgn*(b2 + c2 - a2) * (b2 + c2 - a2), (double)4 * b2 * c2);
}

 

几何常用

原文:https://www.cnblogs.com/dealer/p/13320733.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!