这是一个平面上点或向量类, 包含了常用的向量运算如: 数乘, 点乘.
三维或更高维的类可由此拓展出来.
/*
计算几何入门
设计一个点(向量)类, 包含各种属性和操作
*/
#include <iostream>
#include <cmath>
using namespace std;
class Point;
typedef Point Vector;
class Point
{
public:
double x, y;
Point(int x = 0.0, int y = 0.0):x(x),y(y){} //构造函数
double norm() { //返回向量的模的平方
return x*x + y*y;
}
double abs() {
return sqrt(norm()); //返回向量的模
}
Point operator + (Point &p) { //+
return Point(x + p.x, y + p.y);
}
Point operator - (Point &p) { //-
return Point(x - p.x, y - p.y);
}
Point operator * (double k) { //*
return Point(k*x, k*y);
}
Point operator / (double k) { //除
return Point(x/k, y/k);
}
Point operator * (Point const p) {
return Point(x*p.x, y*p.y);
}
Point dot(Point const v) {
return Point(x*v.x, y*v.y);
}
/*Point cross(Point &v) {
Point ()
}*/
friend ostream & operator << (ostream & out, Point const p);
};
ostream & operator << (ostream & out, Point const p)
{
out << "x = " << p.x << ' ' << "y = " << p.y;
return out;
}
int main()
{
Point p1(1,2);
Point p2(3,4);
cout << "p1的模平方: " << p1.norm() << endl;
cout << "p1的模: " << p1.abs() << endl;
Point p3 = p1 + p2;
cout << "p3: x = " << p3.x << " y = " << p3.y << endl;
p2 = p2*5;
cout << "现在5*p2: x = " << p2.x << " y = " << p2.y << endl;
cout << "p3: " << p3 << endl;
cout << "计算p1,p2的点积:\n";
cout << p1.dot(p2) << endl;
cout << p1*p2 << endl;
}