-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVector.cpp
83 lines (78 loc) · 1.3 KB
/
Vector.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include<iostream>
#include<math.h>
class Vec
{
public:
Vec(double X,double Y):x(X),y(Y){}
double x,y;
//basic
Vec operator+(Vec c);
Vec operator-(Vec c);
Vec operator+(double c);//在向量方向上增加c单位长度即|V|=|V|+c;
Vec operator-(double c);//在向量方向上减少c单位长度即|V|=|V|-c;
double operator^(Vec c);//叉乘膜
Vec operator*(double c);
Vec operator/(double c);
double operator*(Vec c);//点乘
double mo();//取膜
void setLength(double c);
double operator|(Vec c);//射影
//Debug
void print(){std::cout<<x<<" "<<y<<" "<<mo()<<std::endl;}
};
Vec Vec::operator+(Vec c)
{
return Vec(x+c.x,y+c.y);
}
Vec Vec::operator-(Vec c)
{
return Vec(x-c.x,y-c.y);
}
Vec Vec::operator+(double c)
{
double m=mo();
return Vec(x+c/m*x,y+c/m*y);
}
Vec Vec::operator-(double c)
{
double m=mo();
return Vec(x-c/m*x,y-c/m*y);
}
double Vec::operator^(Vec c)
{
return x*c.y-c.x*y;
}
Vec Vec::operator*(double c)
{
return Vec(x*c,y*c);
}
Vec Vec::operator/(double c)
{
return Vec(x/c,y/c);
}
double Vec::operator*(Vec c)
{
return c.x*x+c.y*y;
}
double Vec::mo()
{
return hypot(x,y);
}
void Vec::setLength(double c)
{
double m=mo();
x=c/m*x;
y=c/m*y;
}
double Vec::operator|(Vec c)
{
return (c.x*x+c.y*y)/c.mo();
}
int main()
{
Vec i(100,100);
i.setLength(320);
std::cout<<""<<std::endl;
i.print();
return 0;
}