多邊形問題( 判斷乙個點在不在多邊形內)

2021-06-21 21:48:46 字數 1201 閱讀 3963

【試題一】

災區已經非常困難,災民需要帳篷、衣物、食品和血漿。可通往災區的道路到處都是塌方,70%以上的路面損壞,橋梁全部被毀。中國空軍立即啟動應急預案,展開史上最大強度非作戰空運行動,準備向災區空投急需物資。由於餘震不斷,天氣惡劣,怎樣知道空投的物資是否落在某災區的區域內呢?

經過空中觀測,某災區為一凸多邊形,空投的物資落在p(x,y)點。你能否給出乙個正確判斷?

【標準輸入】

第1行: n x y (n為凸形的邊數,x,y為空投物資的座標 )

第2行: x1 y1 x2 y2…….xn yn (逆序給出的n個頂點座標 )

【標準輸出】

yes (物資落在災區的區域內 )

或no (物資落在災區的區域外 )

【約束條件】

(1) 3 ≤n ≤ 20

(2) 所有的座標xi和yi為整數 -10000≤ xi ,yi ≤10000

(3) x,y為整數 -10000≤ x ,y ≤10000

(4) 時間限制: 1000ms

【 樣 例 】

標準輸入

4 2 2

-1 0 3 -2 10 9 -1 110

標準輸出

yes題目分析:求乙個給定的點a(x0,y0)是否在凸多邊型p0p1...pn-1(逆序給出)內部,我們首先想到的是判斷乙個三角形三個點是順時針還是逆時針的,我們可以利用這個結論。

看下圖:

如果點a在多邊形內部,則三角形apip(i+1%n)必為逆時針,而如果在外部,則有些點和a組成的三角形是順序的,多以,我們只需要依次判斷apip(i+1%n)是否為逆時針即可,一旦發現不是逆時針,則說明在凸多邊型外部!

那麼我們來看怎麼判斷三角形的正序還是逆序呢?我們有以下結論:定義向量ab=(x1,y1),ac=(x2,y2),則:

ab x ac>0  逆時針

ab x ac<0  順時針,其中運算x(向量叉乘)定義為x1*y2-x2*y1。

#include#includeint main(){

int a[100],b[100];

int n,i,ans,t,x,y;

while(~scanf("%d%d%d",&n,&x,&y)){

for(i=0;i

怎樣判斷乙個點在多邊形內

畢業 需要用到的乙個點 參考自 最近頭腦發熱,突然想研究下怎麼判斷乙個座標點是否在乙個多邊形內,這個問題解決之後就可以根據乙個座標點計算出這個點所在的行政區劃。從網上找了一下,發現了乙個很巧妙的演算法,演算法如下 def is point in x,y,points count 0 x1,y1 po...

判斷乙個多邊形是否是凸多邊形

乙個很簡單的問題看了好久,但就是提交不過,也看不出是哪齣了問題 問題為 判斷乙個多邊形是否是凸多邊形 我的思路是這樣的 建立x,y這兩個陣列用來存放座標,計算兩個向量,然後讓計算它們的叉積,如果叉積小於零,說明後乙個向量在前乙個向量的右側,即順時針方向,只要有乙個是這樣的情況,則不符合條件。然後就是...

如何判斷乙個點在多邊形的內部

給定任意多邊形 不一定是凸多邊形 的頂點座標 逆時針給出點的座標 然後給定一點,判斷該點是否在多邊形內部?使用 向量的叉乘 向量積 來進行計算。向量積複習 因此,當多邊形點的順序是逆時針時,如果點在 多邊形內,則向量積 的結果時正數 為什麼呢,見下面 特殊 對於三角形,如果給定的點不是逆時針的,也可...