Я думаю , что если искомая точка находится не на краю рамки, то она должна быть в вершине тесселяции вороной точек.Если он находится на краю ящика, он должен находиться на пересечении ящика и на краю тесселяции вороной.
Так что если вы вычисляете тесселяцию вороной, а затем используете rgeos, чтобы пересечь его скоробка, которая дает вам набор возможных точек.Затем вы можете использовать пакет FNN для вычисления соседних расстояний от этих возможных точек до точек данных, сортировки и поиска возможной точки с наибольшим ближайшим соседом.
Это дает вам точную точку без каких-либоGridding бизнес.Если бы это не было так близко ко сну, я бы разобрался с кодом, чтобы это сделать.Вы, вероятно, хотите пакет deldir или тесселяции вороной.Это может даже пересечь коробку ...
Ладно, не совсем перед сном.Вот решение:
findM <- function(pts,xmin,xmax,ymin,ymax){
require(deldir)
require(FNN)
d = deldir(pts[,1],pts[,2],rw=c(xmin,xmax,ymin,ymax))
vpts = rbind(as.matrix(d$dirsgs[,1:2]),as.matrix(d$dirsgs[,3:4]))
vpts = rbind(vpts,cbind(c(xmin,xmax,xmin,xmax),c(ymin,ymin,ymax,ymax)))
vpts = vpts[!duplicated(vpts),]
nn = get.knnx(pts,vpts,k=1)
ptmin = which(nn$nn.dist==max(nn$nn.dist))
list(point = vpts[ptmin,,drop=FALSE], dist = nn$nn.dist[ptmin])
}
Отредактированная версия теперь возвращает одну точку и добавляет угловые точки как возможные.