我是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
文档中没有明确规定,但阅读参考文章可以发现这里使用的约定是"右手定则"。
用右手的手指按照顶点顺序:
- 如果你的拇指指向你(你正在转动逆时针方向),你手中的是多边形的内部
- 如果你的拇指指向相反的方向,你手中的是一个不属于多边形的洞