2011-05-07 107 views
13

目標如何確定一個點是否是一個四邊形

我想,以確定是否一個測試點是確定的四邊形內內。我可能會實現在Matlab中的解決方案,所以我只需要僞代碼。

輸入

角四邊形的:(X1,Y1)(X2,Y2)(X3,Y3)(X4,Y4)

測試點:(XT,YT)

輸出

1 - 如果內四邊形

0 - 否則

更新

有人指出,識別四邊形的頂點是不夠的唯一標識。可以假定的點的順序決定了四邊形的側面(點1連接2,2連接到3,3連接到4,4連接到1)

+4

該點本身並不唯一標識一個四邊形,除非有一個附加的約束,它是凸的,或者說,點給定的順序確定。是否存在其中一個或其他約束條件(如果有的話)? – 2011-05-07 15:33:56

+0

作爲一個例子,考慮一個等邊三角形,在三角形的中心有一個附加點。只要知道這些點就不會讓你知道三角形的哪一個邊緣已經扭曲以達到中心點。 – 2011-05-07 15:35:34

+0

謝謝,更新了問題來解決這個問題。這應該唯一標識四邊形。 – slykat 2011-05-09 04:52:24

回答

4

inpolygon使用。用法是inpolygon(xt,yt,[x1 x2 x3 x4],[y1 y2 y3 y4])

2

因爲它是一個簡單的四邊形,您可以測試爲每個最終在三角點和中間的矩形中的一個點。

EDIT下面是點在三角一些僞代碼:或者使用重心技術

function SameSide(p1,p2, a,b) 
    cp1 = CrossProduct(b-a, p1-a) 
    cp2 = CrossProduct(b-a, p2-a) 
    if DotProduct(cp1, cp2) >= 0 then return true 
    else return false 

function PointInTriangle(p, a,b,c) 
    if SameSide(p,a, b,c) and SameSide(p,b, a,c) 
     and SameSide(p,c, a,b) then return true 
    else return false 

A,B,和C是三角形結束點,P是下點test

// Compute vectors   
v0 = C - A 
v1 = B - A 
v2 = P - A 

// Compute dot products 
dot00 = dot(v0, v0) 
dot01 = dot(v0, v1) 
dot02 = dot(v0, v2) 
dot11 = dot(v1, v1) 
dot12 = dot(v1, v2) 

// Compute barycentric coordinates 
invDenom = 1/(dot00 * dot11 - dot01 * dot01) 
u = (dot11 * dot02 - dot01 * dot12) * invDenom 
v = (dot00 * dot12 - dot01 * dot02) * invDenom 

// Check if point is in triangle 
return (u > 0) && (v > 0) && (u + v < 1) 
1

假設你給定的座標是安排st (X1,Y1)=最右邊的座標 (x2,y2)=最高協調 (X3,Y3)=最左邊的座標 (X4,Y4)= botoom最協調

你可以做到以下幾點:

1. calculate the 4 lines of the quadrilateral (we'll call these quad lines) 
2. calculate 4 lines, from the (xt, yt) to every other coordinate (we'll call these new lines) 
3. if any new line intersects any of the quad lines, then the coordinate is outside of the quadrilateral, otherwise it is inside. 
23

enter image description here

您可以測試這個條件的點。也可以將四邊形視爲2個三角形來計算其面積。

+3

這實際上有效嗎?它吹我的心!我試圖想到這種情況不起作用。這不僅適用於四邊形對嗎?!任何形狀。這太棒了。 – Kaliber64 2014-03-01 01:43:53

+1

謝謝。是的,這將適用於任何多邊形! – mili 2014-03-03 08:22:26

+5

這是一個很好的解決方案,但可以很容易地看出,這隻適用於凸四邊形。 – 2015-07-17 07:13:49

相關問題