Извините, я просто не могу устоять. Поскольку всегда полезно знать, что происходит под капотом с чем-то вроде GME, вот решение в реальном коде R.
require(sp)
require(rgeos)
# Create example polygon data
x <- readWKT("POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))")
y <- readWKT("POLYGON ((3 3, 7 3, 7 7, 3 7, 3 3))")
# Calculate difference in polygon geometries to create null polygon
d <- gDifference(x,y)
# Create random sample in non-null polygon
rs <- spsample(d, 20, type="random")
# Plot results
plot(d, col="red")
plot(rs,pch=19,col="black",add=TRUE)
Этот подход, вероятно, сильно отличается от того, как это делает GME, но использует собственные пространственные классы R sp и довольно новую библиотеку топологий, что делает код очень эффективным. Это также дает пример, который можно легко обернуть в цикл for.