HDU 1756 Cupid’s Arrow(判斷點是否在多邊形內部)

來源:互聯網
上載者:User
Cupid's Arrow

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 702    Accepted Submission(s): 252


Problem Description傳說世上有一支丘位元的箭,凡是被這支箭射到的人,就會深深的愛上射箭的人。
世上無數人都曾經夢想得到這支箭。Lele當然也不例外。不過他想,在得到這支箭前,他總得先學會射箭。
日子一天天地過,Lele的箭術也越來越強,漸漸得,他不再滿足於去射那圓形的靶子,他開始設計各種各樣多邊形的靶子。
不過,這樣又出現了新的問題,由於長時間地練習射箭,Lele的視力已經高度近視,他現在甚至無法判斷他的箭射到了靶子沒有。所以他現在只能求助於聰明的Acmers,你能幫幫他嘛? 


Input本題目包含多組測試,請處理到檔案結束。
在每組測試的第一行,包含一個正整數N(2<N<100),表示靶子的頂點數。
接著N行按順時針方向給出這N個頂點的x和y座標(0<x,y<1000)。
然後有一個正整數M,表示Lele射的箭的數目。
接下來M行分別給出Lele射的這些箭的X,Y座標(0<X,Y<1000)。 


Output對於每枝箭,如果Lele射中了靶子,就在一行裡面輸出"Yes",否則輸出"No"。 


Sample Input

410 1020 1020 510 5215 825 8
 


Sample Output

YesNo
 


Authorlinle 


Source2007省賽集訓隊練習賽(6)_linle專場 


這種題目有點巧看你隨機數選的好不好,就是當前的點和一個無窮遠的一個點組成一條線段,然後判斷這條線段與邊是否有交點

首先與頂點相交不算(這個就看你選的隨機數了,選的好就是沒有,選的不好就是有,不過也可以多試幾次)

而且、如果交點個數是奇數那麼在內部,否則在外部

#include <iostream>#include <stdio.h>#include <string.h>#include <math.h>using namespace std;#define eps 1e-8struct point{    double x;    double y;}po[10000],temp;double multi(point p0, point p1, point p2)//j計算差乘{   return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);}bool across(point s1,point e1,point s2,point e2)//判斷線段是否相交(非規範相交){   return          multi(s1,e1,s2)*multi(s1,e1,e2) < -eps&&          multi(s2,e2,s1)*multi(s2,e2,e1) < -eps;}int main(){    int n,t;    int i,j,k;    int count;    point temp1;    while(scanf("%d",&n)!=EOF)    {        for(i=0;i<n;i++)        scanf("%lf%lf",&po[i].x,&po[i].y);        scanf("%d",&t);        while(t--)        {            count=0;            scanf("%lf%lf",&temp.x,&temp.y);            temp1=temp;            temp1.x+=100008;            temp1.y+=98430;            po[i]=po[0];            for(i=0;i<n;i++)            if(across(temp,temp1,po[i],po[i+1]))            count++;            if(count==0 || count%2==0)            printf("No\n");            else            printf("Yes\n");        }    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.