这是一个语言不可知的问题。给定与l,t,w,h
(左,顶部,宽度,高度)和点x,y
矩形的尺寸,我如何找到该点矩形周长的最近点?如何查找矩形周长到给定点的最近点?
我试图解决它在Lua,但任何其他语言会做。到目前为止,这是我最大的努力:
local function nearest(x, a, b)
if a <= x and x <= b then
return x
elseif math.abs(a - x) < math.abs(b - x) then
return a
else
return b
end
end
local function getNearestPointInPerimeter(l,t,w,h, x,y)
return nearest(x, l, l+w), nearest(y, t, t+h)
end
这适用于一个点外周边的或在外围本身。但对于内周边的点它失败(它只是返回x,y
)
我的直觉告诉我,该解决方案应该是简单的,但我似乎还没有找到它。
不幸的是,它没有。你的算法返回最近的* corner *的坐标。周边的最近点并不总是其中一个角落。 – kikito
我用另一种算法编辑了我的答案。我在http://www.lua.org/cgi-bin/demo上用一些值对它进行了测试,它似乎运行良好。 – Keeper
对不起,我不认为它的作品。我得到非常随机的值 - 有时甚至在矩形本身之外。 – kikito