【发布时间】:2013-06-17 21:50:18
【问题描述】:
我遇到了这段 C 代码(我认为),这应该是一种检查点是否在 concave 或 convex 多边形内的简洁方法,我想将其转换为 JS 等价物在我的 JS 程序中使用的函数:
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:多边形中的顶点数。是否在末尾重复第一个顶点。
vertx, verty: 包含多边形顶点的 x 和 y 坐标的数组。
testx, testy: strong> 测试点的 X 和 y 坐标。
Code above taken from this Stack Overflow question.
这将如何转化为 JS? 我已经找到了如何在 JS 中启动 for 循环
j = nvert-1
for (i = 0; i < nvert; i++) {
//The whole if thing
j = i
}
而且我猜第一行中的“float *”在 JS 中可以省略。 但我不太确定“int i, j, c = 0;”是什么当“c = 0”时,“!c”是什么意思。 0的反义词是什么?
谢谢!
【问题讨论】:
-
为了回答您的具体问题,c = 0 是布尔表达式的整数实现。在 C 中,布尔值实际上只是一个整数,其中 0 等于 False,1 等于 True。
标签: javascript translate point-in-polygon