POJ 1584 A Round Peg in a Ground Hole(点到直线距离,多边形是否为凸)
2012-09-20 16:25
447 查看
题意:顺时针或逆时针给出n个点和一个圆,判断多边形是否为凸。且圆在多边形里面。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <queue> using namespace std; const double EPS = 1e-6; bool zero(double t){return -EPS<t&&t<EPS;} struct cvector{ double x,y; cvector(double a,double b){x=a,y=b;} cvector(){} }; cvector operator-(cvector a,cvector b){ return cvector(a.x-b.y,a.y-b.y); } cvector operator+(cvector a,cvector b){ return cvector(a.x+b.x,a.y+b.y); } cvector operator*(double a,cvector b){ return cvector(a*b.x,a*b.y); } double operator*(cvector a,cvector b){ return a.x*b.x+a.y*b.y; } double operator^(cvector a,cvector b){ return a.x*b.y-b.x*a.y; } double length(double t){return t<0?-t:t;} double length(cvector t){return sqrt(t*t);} cvector unit(cvector t){ return 1/length(t)*t; } struct cpoint{ double x,y; void get(){ scanf("%lf%lf",&x,&y); } cpoint(double a,double b){x=a,y=b;} cpoint(){} }; cvector operator-(cpoint a,cpoint b){ return cvector(a.x-b.x,a.y-b.y); } double dist(cpoint a,cpoint b){ return length(a-b); } struct cline{ cpoint a,b; cline(cpoint x,cpoint y){a=x,b=y;} }; struct circle{ cpoint a; double len; } cir; double dist(cpoint b,cline a){ cvector v = a.a-a.b; v=cvector(v.y,-v.x); v=unit(v); return length(v*(b-a.b)); } cpoint re[10009]; int main() { freopen("in.txt","r",stdin); int n; while(scanf("%d%lf%lf%lf",&n,&cir.len,&cir.a.x,&cir.a.y)==4&&n>2) { for(int i=1;i<=n;i++) re[i].get(); re[0]=re ;re[n+1]=re[0]; // double t = (re[1]-re )^(re -re[n-1]); double t=0.0; int i,fin=0; for(i=1;i<=n;i++) { if(((re[i+1]-re[i])^(re[i]-re[i-1]))*t<-EPS)break; if(zero(t)) t=((re[i+1]-re[i])^(re[i]-re[i-1])); if(((cir.a-re[i])^(re[i]-re[i-1]))*t<-EPS) fin=1; if(dist(cir.a,cline(re[i],re[i-1]))<cir.len) fin=1; } if(i<n) { printf("HOLE IS ILL-FORMED\n"); continue; } if(fin) printf("PEG WILL NOT FIT\n"); else printf("PEG WILL FIT\n"); } return 0; }
相关文章推荐
- POJ 1584: A Round Peg in a Ground Hole 射线法判断点是否在多边形内 点与直线距离 判断多边形是否为凸多边形
- poj 1584 A Round Peg in a Ground Hole 点到直线的距离 点是否在多边形内 多边形是否为凸
- poj 1584 A Round Peg in a Ground Hole 判断多边形是否为凸多边形 + 圆心是否在凸多边形内 + 圆是否在凸多边形内部
- POJ 1584 A Round Peg in a Ground Hole 判断凸多边形 点到线段距离 点在多边形内
- POJ1584 A Round Peg in a Ground Hole 判断多边形是否为凸多边形,判断凸多边形是否在圆内
- POJ 1584:A Round Peg in a Ground Hole _判断点是否在多边形内(5种方法)
- POJ 1584 A Round Peg in a Ground Hole[判断凸包 点在多边形内]
- POJ 1584 A Round Peg in a Ground Hole 圆是否包含在凸包内
- POJ 1584 A Round Peg in a Ground Hole(是否凸包 && 圆是否在凸包内)
- poj1584 A Round Peg in a Ground Hole 凸多边形判断 和多边形与圆的位置
- POJ-1584-A Round Peg in a Ground Hole-计算几何-凸多边形+多边形包含圆
- POJ 1584 A Round Peg in a Ground Hole 判断凸多边形,判断点在凸多边形内
- POJ 1584[A Round Peg in a Ground Hole]题解
- POJ-1548 A Round Peg in a Ground Hole 凸多边形
- POJ 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)
- poj 1584 A Round Peg in a Ground Hole(判断凸多边形+圆是否在凸多边形内)
- poj1584 A Round Peg in a Ground Hole 判断多边形凹凸,点到线的距离【基础计算几何】
- A Round Peg in a Ground Hole - POJ 1584
- POJ 1584 A Round Peg in a Ground Hole(判断凸多边形,判断圆是否在凸多边形内)
- POJ1584 A Round Peg in a Ground Hole 判断多边形是否为凸多边形,判断凸多边形是否在圆内