#include<iostream>
#include<cmath>
using namespace std;
struct Vector{
double x; //表示从0点到 (x,y)的矢量。
double y; //对矢量只关心方向和长度,不关心(位置)起点终点
Vector(){ //构造函数 无参构造
}
Vector(double xx,double yy):x(xx),y(yy){ //两参构造
}
//矢量加法
Vector operator+(const Vector &p)const{
return Vector(p.x+x,p.y+y);
}
//矢量减法
Vector operator-(const Vector &p)const{
return Vector(x-p.x,y-p.y);
}
//矢量点乘
double operator*(const Vector &p)const{
return p.x*x+p.y*y;
}
//矢量叉乘
double operator^(const Vector &p)const{
return p.x*y-p.y*x;
}
//矢量模长
double length(){
return sqrt(x*x+y*y);
}
//矢量单位化
Vector unit(){
return Vector(x/length(),y/length());
}
//矢量投影长度
double project(const Vector &p){
return p*unit();
}
};
int main(){
Vector A(3,4),B(1,0),C;
double c;
C = A + B;
printf("%.2lf %.2lf\n",C.x,C.y);
C = A - B;
printf("%.2lf %.2lf\n",C.x,C.y);
c = A * B;
printf("%.2lf\n",c);
c = A ^ B;
printf("%.2lf\n",c);
printf("%.2lf %.2lf\n",A.length(),B.length());
C = A.unit();
printf("%.2lf %.2lf\n",C.x,C.y);
c = B.project(A);//A在B方向的投影
printf("%.2lf\n",c);
return 0;
}