这篇文章讲的是二维几何中点和直线的相关问题。
直线的参数表示。直线可以用直线上的一点P0和方向向量v表示(虽然这个向量的大小没什么用处)。直线上所有点P满足P=P0+tv。其中t称为参数。如果已知直线上的两个不同点A和B,则方向向量为B-A,所以参数方程为A+(B-A)t。
参数方程最方便的地方在于直线、射线和线段的方程形式是一样的。区别仅仅在于参数。直线的t没有范围限制。射线的t>0,线段的t在0~1之间,这样,很多对于直线适用的公式可以很方便的用在射线和线段上。
有向直线的存储结构定义:
//有向直线。它的左边就是对应的半平面
struct Line
{
Point p; //直线上任意一点
Vector v; // 方向向量,左边就是对应的半平面
double ang; //极角
Line(){}
Line(Point P, Vector v):p(p), v(v){ang = angle(v);}
//根据参数,求直线上的点
Point point(double t)
{
return p + v*t;
}
//直线的移动 方向是向量的左方向,即上方
Line move(double d)
{
return Line(p + Normal(v)*d, v);
}
bool operator < (const Line &L) const //排序用的比较运算符
{
return ang < L.ang;
}
};
直