向量模板

#include<cmath>
struct node{
    double dis(node);//两点距离

    //向量操作
    node add(node);//加
    double mul(node);//乘
    node mul(double);//倍
    double abs();//模长
    node unt();//单位化
    node neg();//取反
    double agl(node);//夹角度数
    bool eql(node);//向量相等
    int pal(node);//向量平行(同行,反向)

    double x,y;
};
double node::dis(node a){
    return sqrt(pow(x-a.x,2)+pow(y-a.y,2));
}

node node::add(node a){
    return {x+a.x,y+a.y};
}
double node::mul(node a){
    return x*a.x+y*a.y;
}
node node::mul(double a){
    return {x*a,y*a};
}
node node::neg(){
    return {-x,-y};
}

double node::abs(){
    return sqrt(x*x+y*y);
}
node node::unt(){
    double d=this->abs();
    return {x/d,y/d};
}
double node::agl(node a){
    return acos((x*a.x+y*a.y)/(this->abs()*a.abs()));
}

bool node::eql(node a){
    if(fabs(x-a.x)<1e-6&&fabs(y-a.y)<1e-6)return 1;
    return 0;
}
int node::pal(node a){
    node u1=this->unt();//先单位化
    node u2=a.unt();
    if(u1.eql(u2))return 1;//方向相同
    if(u1.eql(u2.neg()))return -1;//方向相反
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值