我碰到這段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相反的是什麼?
謝謝
爲了回答您的具體問題,C = 0是整數實現的一個布爾表達式。在C中,布爾值實際上只是一個整數,其中0等於False,1等於True。 –