我很难找到一个好的算法来获取坐标系中一个点(包括中点)周围的所有点。
示例:
1 1 2 1 3 1
1 2 2 2 3 2
1 3 2 3 3 3
我有上面的网格,例如,如果我输入: get_around_coordinates(2,2,1)
它将返回一个看起来像这样的数组 [[1,1],[2,1],[3,1],[1,2],[2,2],[2,3],[3,1],[3,2],[ 3,3]]
这就是我的方法的样子:
def get_around_coordinates(px, py, radius)
coord = []
start_x = px - radius
start_y = py - radius
(radius * 2 + 1).times do |x|
(radius * 2 + 1).times do |y|
coord.push([start_x + x, start_y + y])
end
end
return coord
end
我希望有人能给我更好的东西。
答案 0 :(得分:10)
def get_around_coordinates(px, py, radius)
xs = (px - radius..px + radius).to_a
ys = (py - radius..py + radius).to_a
xs.product(ys)
end
现在让我们假设Ruby缺少这种方法。功能方法是OOP列表理解(flat_map + [flat_map ...] + map):xs.flat_map { |x| ys.map { |y| [x, y] } }
。
答案 1 :(得分:0)
一种相当粗略的方法
def neighborhood(x=0, y=0, radius)
(x-radius..x+radius).reduce([]) { |neighbors, x1|
(y-radius..y+radius).each { |y1| neighbors << [x1, y1] }
neighbors
}
end