来一波全套向量运算(C++)

//头文件要求
#include <cmath>

struct P{long long x, y;}p[N];

//加法
P operator +(P x, P y){return (P){x.x + y.x, x.y + y.y};} 

//减法
P operator -(P x, P y){return (P){x.x - y.x, x.y - y.y};} 

// 乘法
P operator *(P x, P y){return (P){x.x * y.x - x.y * y.y, x.y * y.x + x.x * y.y};}

//叉积
long long cross(P x, P y){return x.y * y.x - x.x * y.y;} 

 //数量积 点积
long long dot(P x, P y){return x.x * y.x + x.y * y.y;}

//四舍五入除法
long long dv(long long a, long long b){//注意重名!!! 
    return b < 0 ? dv(-a, -b)
     : (a < 0 ? -dv(-a, b)
     : (a + b / 2) / b);}

//模长平方
long long len(P x){return x.x * x.x + x.y * x.y;} 

//模长
long long dis(P x){return sqrt(x.x * x.x + x.y * x.y);} 

//向量除法
P operator /(P x, P y){
    long long l = len(y);
    return (P){dv(dot(x, y), l), dv(cross(x, y), l)};
} 

//向量膜
P operator %(P x, P y){return x - ((x / y) * y);}

//向量GCD 
P gcd(P x, P y){return len(y) ? gcd(y, x % y) : x;}

转载于:https://www.cnblogs.com/hjmmm/p/10433087.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值