向量的常用定义
#include <bits/stdc++.h>
using namespace std;
struct Point
{
double x,y;
Point(double x=0,double y=0):x(x),y(y) {}
};
typedef Point Vector ;
const double esp=1e-10;
///两个向量相加
Vector operator +(Vector v1,Vector v2)
{
return Vector(v1.x+v2.x,v1.y+v2.y);
}
///两个向量相减
Vector operator -(Vector v1,Vector v2)
{
return Vector(v1.x-v2.x,v1.y-v2.y);
}
///向量与数相乘
Vector operator *(Vector v,double a)
{
return Vector(v.x*a,v.y*a);
}
Vector operator /(Vector v,double a)
{
return Vector(v.x/a,v.y/a);
}
///向量与数相除
bool operator<(Vector v1,Vector v2)
{
return v1.x<v2.x||(v1.x==v2.x&&v1.y<v2.y);
}
///减少精度问题
int dcmp(double x)
{
if(fabs(x)<esp) return 0;
return x<0?-1:1;
}
///判断两个向量是否相等
bool operator ==(Vector v1,Vector v2)
{
return dcmp(v1.x-v2.x)==0&&dcmp(v1.y-v2.y)==0;
}
///打印向量
void Print(Vector v)
{
cout<<v.x<<" "<<v.y<<endl;
}
int main()
{
double x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
Vector v1(x1,y1);
Vector v2(x2,y2);
Print(v1+v2);
Print(v1-v2);
Print(v1*2);
Print(v1/2);
cout<<(v1<v2)<<endl;;
cout<<(v1==v2);
}