2013-06-20 80 views
2

我碰到這段C代碼(我認爲)這應該是一個簡潔的方式來檢查點是否在(凹或凸)多邊形內,並且想要使用它在我的JS程序:如何檢查點是否在Javascript中的多邊形

int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy) 
{ 
    int i, j, c = 0; 
    for (i = 0, j = nvert-1; i < nvert; j = i++) { 
    if (((verty[i]>testy) != (verty[j]>testy)) && 
    (testx < (vertx[j]-vertx[i]) * (testy-verty[i])/(verty[j]-verty[i]) + vertx[i])) 
     c = !c; 
    } 
    return c; 
} 

nvert:在多邊形頂點的數量。是否在最後重複第一個頂點。包含多邊形頂點的x和y座標的數組。
testx,testy:測試點的X和Y座標。 (這是從另一個堆棧溢出問題:How can I determine whether a 2D Point is within a Polygon?

這將如何轉化爲JS 我已經找到了我如何開始for循環JS

j = nvert-1 
for (i = 0; i < nvert; i++) { 
    //The whole if thing 
    j = i 
} 

而我呢?猜測第一行中的「float *」可以在JS 中省略,但我不太清楚「int i,j,c = 0;」是什麼或者「!c」在「 c = 0「。與0相反的是什麼?

謝謝

+0

爲了回答您的具體問題,C = 0是整數實現的一個布爾表達式。在C中,布爾值實際上只是一個整數,其中0等於False,1等於True。 –

回答

4

vertx和verty應該是數組,並且應該有數值。將它們初始化爲

vertx = []; verty = [];

然後函數幾乎是一樣的(假設它是正確的)

function pnpoly(var nvert, var vertx, var verty, var testx, var testy). 
{ 
    var i, j, c = 0; 
    for (i = 0, j = nvert-1; i < nvert; j = i++) { 
    if (((verty[i]>testy) != (verty[j]>testy)) && 
    (testx < (vertx[j]-vertx[i]) * (testy-verty[i])/(verty[j]-verty[i]) + vertx[i])) 
    c = !c; 
} 
+0

好的。好。謝謝。 – Henrik

相關問題