在二维平面直角坐标系中,只要给定了两点(不重合),就能确定唯一一条直线,但当直线平行或垂直与x轴时,x或y的系数将为0,不方便存储。
不过,既然给定了两个点,我们可以直接用单位向量表示一条直线的斜率。
set<pair<int, int>> S;
for (int i = 2; i <= n; ++i)
{
int dx = p[i].x - p[1].x, dy = p[i].y - p[1].y;
int d = abs(__gcd(dx, dy));//gcd可能为负数,取绝对值
if (dx < 0)//将向量的方向统一为从左向右
dx = -dx, dy = -dy;
S.insert({dx / d, dy / d});//判断有无重复斜率
}
标签:直线,set,int,斜率,给定,计算,单位向量
From: https://www.cnblogs.com/hetailang/p/16935272.html