//向量常用定义
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
//定义部分
struct point
{
double x,y;
point(double x=0,double y=0):x(x),y(y) {} //构造函数方便编写
};
typedef point Vector;
Vector operator+(Vector a,Vector b)
{
return Vector(a.x+b.x,a.y+b.y);//重载加法
}
Vector operator-(Vector a,Vector b)
{
return Vector(a.x-b.x,a.y-b.y);//重载减法
}
Vector operator*(Vector a,double p)
{
return Vector(a.x*p,a.y*p);//重载与数乘法
}
Vector operator/(Vector a,double p)
{
return Vector(a.x/p,a.y/p);//重载与数除法
}
bool operator < (const point&a,const point&b)
{
return a.x<b.x||(a.x==b.x&&a.y<b.y);//重载小于号表示在点的左边
}
const double eps=1e-10;
int dcmp(double x)
{
if(fabs(x)<eps) return 0;
else return x<0?-1:1;
}
bool operator == (const point &a,const point &b)
{
return dcmp(a.x-b.x)==0&&dcmp(a.y-b.y)==0;//重载等于
}
//计算部分
double dot(Vector a,Vector b){return a.x*b.x+a.y*b.y;}//定义点乘
double lenth(Vector a){return sqrt(dot(a,a));}//定义向量膜长
double angle(Vector a,Vector b) {return acos(dot(a,b)/lenth(a)/lenth(b));}//定义计算两向量夹角
double cross(Vector a,Vector b) {return a.x*b.y-a.y*b.x;}//定义叉积
double area2(point a,point b,point c){return cross(b-a,c-a);}//通过叉积已知三个点计算面积(此处为两倍)
Vector Rotate(Vector a,double rad)
{
return Vector(a.x*cos(rad)-a.y*sin(rad),a.x*sin(rad)+a.y*cos(rad));//向量旋转
}
Vector normal(Vector a)
{
double l=lenth(a);
return Vector(-a.y/l,a.x/l);//计算单位法向量(左转90度)
}
int main()
{
//Vector a(1,0),b(0,1),c(0,0),d;
//double c= angle(a,b);
//d=Rotate(a,3.1415926);
//cout <<d.x<<" "<<d.y<< endl;
return 0;
}
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
//定义部分
struct point
{
double x,y;
point(double x=0,double y=0):x(x),y(y) {} //构造函数方便编写
};
typedef point Vector;
Vector operator+(Vector a,Vector b)
{
return Vector(a.x+b.x,a.y+b.y);//重载加法
}
Vector operator-(Vector a,Vector b)
{
return Vector(a.x-b.x,a.y-b.y);//重载减法
}
Vector operator*(Vector a,double p)
{
return Vector(a.x*p,a.y*p);//重载与数乘法
}
Vector operator/(Vector a,double p)
{
return Vector(a.x/p,a.y/p);//重载与数除法
}
bool operator < (const point&a,const point&b)
{
return a.x<b.x||(a.x==b.x&&a.y<b.y);//重载小于号表示在点的左边
}
const double eps=1e-10;
int dcmp(double x)
{
if(fabs(x)<eps) return 0;
else return x<0?-1:1;
}
bool operator == (const point &a,const point &b)
{
return dcmp(a.x-b.x)==0&&dcmp(a.y-b.y)==0;//重载等于
}
//计算部分
double dot(Vector a,Vector b){return a.x*b.x+a.y*b.y;}//定义点乘
double lenth(Vector a){return sqrt(dot(a,a));}//定义向量膜长
double angle(Vector a,Vector b) {return acos(dot(a,b)/lenth(a)/lenth(b));}//定义计算两向量夹角
double cross(Vector a,Vector b) {return a.x*b.y-a.y*b.x;}//定义叉积
double area2(point a,point b,point c){return cross(b-a,c-a);}//通过叉积已知三个点计算面积(此处为两倍)
Vector Rotate(Vector a,double rad)
{
return Vector(a.x*cos(rad)-a.y*sin(rad),a.x*sin(rad)+a.y*cos(rad));//向量旋转
}
Vector normal(Vector a)
{
double l=lenth(a);
return Vector(-a.y/l,a.x/l);//计算单位法向量(左转90度)
}
int main()
{
//Vector a(1,0),b(0,1),c(0,0),d;
//double c= angle(a,b);
//d=Rotate(a,3.1415926);
//cout <<d.x<<" "<<d.y<< endl;
return 0;
}