2013-01-02 33 views
2

我有4個座標的區域:x1,y1 ...等等,還有一個位置x0,y0檢查所選區域中是否有座標

如何檢查我的座標是否在選定的區域?

Area and point coordinates

+0

可能重複的[如何確定一個點是否在四邊形](http://stackoverflow.com/questions/5922027/how-to-determine-if-a-point-is-within-a-quadrilateral ) – finnw

回答

2

我將解釋如何檢查(X0,Y0)位於 「下」 到(X1,Y1)和(x2,y2)的線路。本質上,你需要矢量(x0-x1,y0-y1)指向(x2-x1,y2-y1)的「右邊」。這相當於說矩陣

x0-x1  y0-y1 

x2-x1  y2-y1 

有一個負面的決定因素。所以你的病情變成

(x0-x1)(y2-y1) < (y0-y1)(x2-x1). 

你會得到這樣一個條件限制區域的任何線。

+0

沒想着分別檢查每一行。有趣的解決方案。謝謝。 – Narek

1

A = {x1, y1} 
B = {x2, y2} 
C = {x3, x3} 
D = {x4, x4} 

首先,確保點形成一個多項式和不在一條直線。這可以通過比較其中AB,AC,AD是方向矢量的direction(AB) != direction(AC) != direction(AD)來完成。

爲了確保某個點P = {x0, y0}位於多邊形ABCD內,檢查sign(AC X AP) == sign(CD X CP) == sign(DB X DP) == sign(BA X BP)就足夠了。

AC: Directional vector A -> C 
AP: Directional vector A -> P 
. 
. so on! 
. 
X: Cross product 
sign: sign of cross product (+ or -) 

只需要比較方向的符號而不是大小。