使用 R 中的 pip2d 函数,我们如何知道顶点的正确"顺序"?



我是R的新手,我想确定一个点是否包含在一个多边形中。我用R函数pip2d来做。我理解这个函数的基本原理,但我很难弄清楚在多边形矩阵中放置顶点的适当顺序。因为我要在很多数据上迭代这个函数,所以我需要真正理解这一部分,这样我就不会遇到未来的问题。

1日试

这是我第一次尝试所做的:

poly1 <- rbind(c(14,36), c(14,63), c(25,63), c(25,36))
points <- rbind(c(20,45), c(20,70), c(35,45), c(35,70))
pip2d(poly1, points)

对于这些坐标,我期望函数返回这样的输出:1, -1, -1, -1,这意味着点(20,45)在多边形的边界内。

相反,我得到了这个:-1, -1, 1, -1,这对我来说没有任何意义。

二试

我摆弄了一下,改变了顶点的顺序,但保持了相同的多边形:

poly1 <- rbind(c(14,36), c(25,36), c(25,63), c(14,63))
points <- rbind(c(20,45), c(20,70), c(35,45), c(35,70))
pip2d(poly1, points)

这个改变给了我预期的输出:1, -1, -1, -1 .

第一次尝试的顺序和第二次尝试的顺序有什么不同?

谢谢

这是由于用于定义多边形内部或多边形外部的约定。
虽然pip2d文档中没有明确规定,但阅读参考文章可以发现这里使用的约定是"右手定则"。

用右手的手指按照顶点顺序:

  • 如果你的拇指指向你(你正在转动逆时针方向),你手中的是多边形的内部
  • 如果你的拇指指向相反的方向,你手中的是一个不属于多边形的洞

最新更新