#include "pch.h" // use stdafx.h in Visual Studio 2017 and earlier #include "Point.h" const double eps = 1e-6; bool Equal(double a, double b) { return ((fabs(a - b) < eps) ? true : false); } bool P::operator<(P B) const { if (!Equal(x, B.x)) return x < B.x; if (!Equal(y, B.y)) return y < B.y; if (!Equal(z, B.z)) return z < B.z; return false; } bool P::operator==(P B) const { return Equal(x, B.x) && Equal(y, B.y) && Equal(z, B.z); } bool P::operator!=(P B) const { return !(Equal(x, B.x) && Equal(y, B.y) && Equal(z, B.z)); } void P::set(int i, double v) { if (i == 0) x = v; else if (i == 1) y = v; else if (i == 2) z = v; } const double P::get(int i) { if (i == 0) return x; else if (i == 1) return y; else if (i == 2) return z; return 0; } void P::reverse() { dx = -dx; dy = -dy; dz = -dz; } P::P(double x1, double y1, double z1) { x = x1; y = y1; z = z1; dx = 0; dy = dz = 0; isend = 0; type = ref = 0; } P::P() { x = y = z = 0; dx = 0; dy = dz = 0; isend = 0; type = ref = 0; } P P::operator-(P B) const { return P(x - B.x, y - B.y, z - B.z); } P P::operator+(P B) const { return P(x + B.x, y + B.y, z + B.z); } P P::operator*(double p) const { return P(x * p, y * p, z * p); } P P::operator/(double p) const { return P(x / p, y / p, z / p); } void P::print(string s) { cout << s << setprecision(10) << " : " << x << " " << y << " " << z << endl; return; } // 设置方向 void P::setDir(const P &dir) { dx = dir.x; dy = dir.y; dz = dir.z; }