HDU 3902 Swordsman(判断任意多边形是否为轴对称图形)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3902

之前做这类题目的时候是先找多边形的重心,因为对称轴一定经过重心,然后再找另外一个点确定对称轴后判断

这次直接给每条线段添加一个中点,然后开始枚举最多n条对称轴,然后判断是否对称

也就是对称轴一定垂直平分其两边的点的连线

判断垂直直接求两向量点积,判断平分,线段中点在对称轴上!

#include 
#include 
#include 
#include 
#include 
using namespace std;
#define eps 1e-10
#define maxn 21000
#define mid(a,b) ((a+b)/2)
#define zero(x) (fabs(x)i;j--,k++){
                if(!is_ok(po[j],po[(i+t+k)%n]))
                break;
            }
            if(i==j){
                flag=true;
                break;
            }
        }
        if(flag) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}


你可能感兴趣的:(计算几何)