判斷一個點是否在多邊形內(nèi)部 如何判斷一個點是否在一個多邊形內(nèi)?
如何判斷一個點是否在一個多邊形內(nèi)?假設(shè)多邊形的坐標存儲在一個數(shù)組中。首先,我們需要得到陣列在橫坐標和縱坐標上的最大值和最小值,并根據(jù)這四個點計算出一個四邊形。首先要判斷目標坐標點是否在四邊形內(nèi)。如果在
如何判斷一個點是否在一個多邊形內(nèi)?
假設(shè)多邊形的坐標存儲在一個數(shù)組中。首先,我們需要得到陣列在橫坐標和縱坐標上的最大值和最小值,并根據(jù)這四個點計算出一個四邊形。首先要判斷目標坐標點是否在四邊形內(nèi)。如果在四邊形之外,我們可以跳過更復(fù)雜的計算,直接返回false。
//我不能通過這個測試。。。直接返回false;
下一步是核心算法部分:
首先,參數(shù)nvert表示多邊形的幾個點。浮點數(shù)testx和testy分別表示待測點的橫坐標和縱坐標,*vertx和*verty分別表示多邊形橫坐標和縱坐標數(shù)組的第一個地址。
我們注意到每個計算都涉及兩個相鄰點和要測試的點,然后考慮兩個問題:verty[J]<testy< verty[i
]2?如果你不明白If語句的后半部分,請在紙上寫下I和j之間的斜率公式。在初中階段你需要運用一點解析幾何和不等式的知識。對于大多數(shù)代碼農(nóng)民來說,這是小菜一碟。
速求c語言編程,給定n個點的坐標,這n個點依次圍成一閉合多邊形,再給一點(x,y),判斷它是否在多邊形中?
程序代碼如下(直接應(yīng)用函數(shù)pnpoly):
int pnpoly(int nvert,float*vertx,float*verty,float testx,float testy)
{
int i,J,C=0
for(i=0,J=nvert-1,i
if((verty[i]>testy)!=(verty[J]>testy))&
](testx
C=!C
}
]返回C
}
]參數(shù)說明:
nvert:多邊形的頂點數(shù)
vertx,Verty:頂點的X和Y坐標數(shù)組
testx,testy:被測點的X和Y坐標
擴展數(shù)據(jù)
]判斷一個點是否在多邊形內(nèi)最簡單的方法是使用射線法,因為它可以應(yīng)用于所有類型的多邊形,而不考慮特殊情況,而且速度相對較快。
該算法的思想非常簡單:在多邊形外的任意點向P(x,y)繪制一條虛擬光線,然后計算光線與多邊形邊緣相交的次數(shù)。如果階數(shù)是偶數(shù),則P(x,y)在多邊形之外。如果是奇數(shù),P(x,y)在多邊形內(nèi)。
怎么利用多邊形頂點坐標求多邊形面積?
第31章,第1節(jié),問題8。只要是邊不相交的簡單多邊形,即不僅是凸多邊形,而且是各種奇形凹多邊形,就可以用格林公式計算面積。格林公式:如果函數(shù)P(x,y),q(x,y)在由一條或多條光滑曲線圍成的封閉區(qū)域D內(nèi)是連續(xù)的,且具有連續(xù)的一階偏導(dǎo)數(shù),則l是區(qū)域D的邊界曲線,取正方向。邊不相交的簡單多邊形是一個由多條線段包圍的閉合區(qū)域,因此可以使用格林公式。設(shè)P=0,q=x,面積s=i點的坐標為,i點的坐標為,則線段的參數(shù)表達式為,so,so,面積。上面的公式可以計算任何簡單多邊形的面積,包括三角形、四邊形和六邊形。Python實現(xiàn):