我发现了一个类似的问题,但我不相信我想要做的事情。我正试图画一个在R中间有一个洞的圆圈。
我知道如何使用sampSurf库绘制圆圈:
radius = 20
sp.dbh = spCircle(radius, centerPoint=c(x=30,y=80), spID='tree.1')
plot(sp.dbh$spCircle)
但我想画一个“外圈”,在这个圈子的中间有一个洞。有没有办法做到这一点?要清楚,圆的外边缘应该是环的内边缘。谢谢你的帮助!
答案 0 :(得分:1)
这有点难看,但您可以使用基本图形功能轻松编写自己的函数来绘制这样的形状。我们基本上只是将形状绘制成两个(稍微重叠)的部分。
ring <- function(x,y,outer,inner, border=NULL, col=NA, lty=par("lty"), N=100, ...) {
t <- seq(0, pi, length.out=N)
tx <- seq(0-pi/10, pi+pi/10, length.out=N)
top <- cbind(c(x+cos(tx)*outer, x-cos(tx)*inner), c(y+sin(tx)*outer, y+sin(tx)*inner))
bot <- cbind(c(x-cos(tx)*outer, x+cos(tx)*inner), c(y-sin(tx)*outer, y-sin(tx)*inner))
out <- cbind(c(x+cos(t)*outer,x-cos(t)*outer), c(y+sin(t)*outer, y-sin(t)*outer))
inn <- cbind(c(x-cos(t)*inner, x+cos(t)*inner), c(y+sin(t)*inner, y-sin(t)*inner))
if (!is.na(col)) {
polygon(top, border=NA, col = col, ...)
polygon(bot, border=NA, col = col, ...)
}
if(!is.null(border)) {
lines(out, col=border, lty=lty)
lines(inn, col=border, lty=lty)
} else {
lines(out, lty=lty)
lines(inn, lty=lty)
}
}
#test
plot(0,0, xlim=c(-10,10), ylim=c(-10,10),type="n", asp=1)
ring(1,4,5,2)