我想,以確定是否一個測試點是確定的四邊形內內。我可能會實現在Matlab中的解決方案,所以我只需要僞代碼。
輸入
角四邊形的:(X1,Y1)(X2,Y2)(X3,Y3)(X4,Y4)
測試點:(XT,YT)
輸出
1 - 如果內四邊形
0 - 否則
更新
有人指出,識別四邊形的頂點是不夠的唯一標識。可以假定的點的順序決定了四邊形的側面(點1連接2,2連接到3,3連接到4,4連接到1)
我想,以確定是否一個測試點是確定的四邊形內內。我可能會實現在Matlab中的解決方案,所以我只需要僞代碼。
輸入
角四邊形的:(X1,Y1)(X2,Y2)(X3,Y3)(X4,Y4)
測試點:(XT,YT)
輸出
1 - 如果內四邊形
0 - 否則
更新
有人指出,識別四邊形的頂點是不夠的唯一標識。可以假定的點的順序決定了四邊形的側面(點1連接2,2連接到3,3連接到4,4連接到1)
inpolygon
使用。用法是inpolygon(xt,yt,[x1 x2 x3 x4],[y1 y2 y3 y4])
因爲它是一個簡單的四邊形,您可以測試爲每個最終在三角點和中間的矩形中的一個點。
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)
假設你給定的座標是安排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.
如果目標是編碼自己的測試,然後選擇anyclassicpoint in polygon test來實現。否則,按照雅各布的建議。
該點本身並不唯一標識一個四邊形,除非有一個附加的約束,它是凸的,或者說,點給定的順序確定。是否存在其中一個或其他約束條件(如果有的話)? – 2011-05-07 15:33:56
作爲一個例子,考慮一個等邊三角形,在三角形的中心有一個附加點。只要知道這些點就不會讓你知道三角形的哪一個邊緣已經扭曲以達到中心點。 – 2011-05-07 15:35:34
謝謝,更新了問題來解決這個問題。這應該唯一標識四邊形。 – slykat 2011-05-09 04:52:24