UVa11800

 题目中表述: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, 平行四边行

  }  

}

原文地址:https://www.cnblogs.com/Accoral/p/3139285.html