程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ZOJ1081 Points Within

ZOJ1081 Points Within

編輯:C++入門知識

PS: 判斷點是否在多邊形內,用的繞圈法,具體參見劉汝佳的訓練指南。

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

struct point {
    int x, y;
    point(double x=0, double y=0):x(x),y(y) {}
};
point operator - (point A, point B) {
    return point(A.x-B.x, A.y-B.y);
}

double Cross(point A, point B) {
    return A.x*B.y - A.y*B.x;
}
vector v;
vector Contain;
vector check;
int n, m;
const double eps = 1e-10;
int dcmp(double x) {
    if(fabs(x)0 && d1<=0 && d2 > 0) wn++;
        if(k<0 && d2<=0 && d1 > 0) wn--;
    }
    if(wn!=0) return 1;
    else return 0;
}


int main()
{
    int T = 1;
    point tmp;
    bool first = false;
    while(scanf("%d", &n)!=EOF && n) {
        if(first) printf("\n");
        else first = true;
        scanf("%d", &m);
        v.clear();
        Contain.clear();
        for(int i = 0; i < n; i++) {
            scanf("%d%d", &tmp.x, &tmp.y);
            Contain.push_back(tmp);
        }
        for(int i = n-1; i >= 0; i--) {
            v.push_back(Contain[i]);
        }
        check.clear();
        for(int i = 0; i < m; i++) {
            scanf("%d%d", &tmp.x, &tmp.y);
            check.push_back(tmp);
        }
        printf("Problem %d:\n", T++);
        for(int i = 0; i < m; i++) {
            int res = isPointIn(check[i]);
            if(res==1) printf("Within\n");
            else printf("Outside\n");
        }
    }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved