题目中表述:no three of them are collinear
没有三点共线,也就不会有两点重合。
如何判断四个顶点的位置,是这题比较重要的一个点。
部分代码:
if ( SegmentProperIntersection(A, B, C, D) ) v[0] = A, v[1] = B, v[2] = C, v[3] = D, flag = 1; else if ( SegmentProperIntersection(A, C, B, D) ) v[0] = A, v[1] = C, v[2] = B, v[3] = D, flag = 1; else if ( SegmentProperIntersection(A, D, B, C) ) v[0] = A, v[1] = D, v[2] = B, v[3] = C, flag = 1;
通过判断线段是否规范正交,决定出四边行的四个顶点位置。
根据确定的四个顶点位置,判断两对对边是否平行;
if两个都不平行,就是普通四边行
else if只有一个是平行的,就是梯形
else {
计算四个边,加入到set中;
sz = set.size();
if有一个角直角{
if sz为1,就是正方形
else 是矩形
}
else {
if sz为1, 菱形
if sz为2, 平行四边行
}
}