1. 程式人生 > >三維幾何-基礎、直線

三維幾何-基礎、直線

數學上,三維幾何是3維歐式空間幾何的傳統名稱。因為實際上這大致就是我們生活的空間。

我們在前面介紹過向量運算,其中很多內容也適合三維幾何,如點+向量=點,向量+向量=向量,點+點沒有定義。

首先是輔助巨集的定義:

const double eps = 1e-10;
const double PI = acos(-1);  // π
const double TWO_PI = 2*PI;
const int maxn = 100 + 5;
const int INF = 10000;

三維點的定義:

struct Point3
{
    double x, y, z;
    Point3(double x = 0, double y = 0, double z = 0):x(x), y(y), z(z){}
};
typedef Point3 Vector3;    

向量操作:

Vector3 operator + (const Vector3 &A,const Vector3 &B)
{
    return Vector3(A.x+B.x, A.y+B.y, A.z+B.z);
}
Vector3 operator - (const Vector3 &A,const Vector3 &B)
{
    return Vector3(A.x-B.x, A.y-B.y, A.z-B.z);
}
Vector3 operator * (const Vector3 &A, double p)
{
    return Vector3(A.x*p, A.y*p, A.z*p);
}
Vector3 operator / (const Vector3 &A, double p)
{
    return Vector3(A.x/p, A.y/p, A.z/p);
}
bool operator == (const Vector3 &A,const Vector3 &B)
{
    return (dcmp(A.x - B.x) == 0) && (dcmp(A.y - B.y) == 0) && (dcmp(A.z - B.z) == 0);
}

直線的表示。

直線仍然可以用引數方程(點和向量)來表示,並且射線和線段仍然可以看成引數有取值範圍限制的直線,並且點到直線的投影和二維情形一樣。