如何解决R 中多边形和线的复杂裁剪空间交集?
我想使用多边形而不是矩形来裁剪(或者可能正确的公式是执行空间交叉)多边形和线,如下所示:
以下是一些代码,用于制作多边形以实现可重复性和示例:
p1 <- data.frame(x = c(-0.81,-0.45,-0.04,0.32,0.47,0.86,0.08,-0.46,-1,-0.76),y = c(0.46,1,0.64,0.99,-0.14,-0.84,-0.24,-0.44,0.12))
p2 <- data.frame(x = c(-0.63,-0.2,-0.38,-0.26,-0.82,-0.57,y = c(-0.1,0.15,-0.17,-0.79,-0.97,-0.7,-0.61))
l1 <- data.frame(x = c(0.1,0.28,0.29,0.52,0.51,0.9,1),y = c(0.19,-0.15,0.25,0.47))
plot.new()
plot.window(xlim = c(-1,ylim = c(-1,1))
polygon(p2$x,p2$y,col = "blue")
polygon(p1$x,p1$y)
lines(l1$x,l1$y)
解决方法
您可以为此使用 spatstat
包。原始示例下方是
通过了。在 spatstat
中,多边形用作
点模式,因此它们属于 owin
类。可以设置
与 owin
对象的交集、联合等。
p1 <- data.frame(x = c(-0.81,-0.45,-0.04,0.32,0.47,0.86,0.08,-0.46,-1,-0.76),y = c(0.46,1,0.64,0.99,-0.14,-0.84,-0.24,-0.44,0.12))
p2 <- data.frame(x = c(-0.63,-0.2,-0.38,-0.26,-0.82,-0.57,y = c(-0.1,0.15,-0.17,-0.79,-0.97,-0.7,-0.61))
l1 <- data.frame(x = c(0.1,0.28,0.29,0.52,0.51,0.9,1),y = c(0.19,-0.15,0.25,0.47))
在 spatstat 中,多边形必须逆时针遍历,因此:
library(spatstat)
p1rev <- lapply(p1,rev)
p2rev <- lapply(p2,rev)
W1 <- owin(poly = p1rev)
W2 <- owin(poly = p2rev)
L1 <- psp(x0 = l1$x[-nrow(l1)],y0 = l1$y[-nrow(l1)],x1 = l1$x[-1],y1 = l1$y[-1],window = boundingbox(l1))
plot(boundingbox(W1,W2,L1),type= "n",main = "Original")
plot(W2,col = "blue",add = TRUE)
plot(W1,add = TRUE)
plot(L1,add = TRUE)
W2clip <- W2[W1]
L1clip <- L1[W1]
plot(W1,main = "Clipped")
plot(W2clip,add = TRUE)
plot(L1clip,add = TRUE)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。