我一直致力于JavaScript / JQuery代码,它允许输入框之间的箭头键移动(是的,我知道这打破了标准UI)。
通过循环遍历每个元素并在每个方向(左,右,上和下)找到最接近的元素来工作。
P1:(0,0),P2:(1,0),P3:(0,2)
P1有一个点向右(P2),一个点向上(P3)
P2有一个点向左(P1)和一个点向上(P3) 没有图片
P3有两个点(P1和P2),但P1更接近
因此最终的动作是:
Up
1 -> 3
2 -> 3
Right
1 -> 2
Down
3 -> 1
Left
2 -> 1
对于这个例子:
P1有两个传入和两个传出连接
P2有一个传入和两个传出连接
P3有两个传入和一个传出连接。
这让我想到了。
是否存在一组点,使得一个或多个点无法访问(0个传入连接),或者是否可以证明不存在这样的集合?
旁注:
如果忽略向上/向下组件(仅使用左和右垂直分割),则在P1中将P3指向不可访问:(0,0),P2:(2,0),P3:(1,4)。 / p>
这是JavaScript / JQuery代码,如果它可以帮助任何人。
function arrowKeyNavigation(elements) {
// Get the position of each element.
var elementOffsets = [];
elements.each(function(key, element) {
elementOffsets[key] = $(element).offset();
});
// Find the closest point in each direction and store the points in data('keyNav') for later use.
for (var i = 0; i < elementOffsets.length; i++) {
var closestPoints = [];
for (var j = 0; j < elementOffsets.length; j++) {
if (i != j) {
var distance = calcDistanceSquared(elementOffsets[i], elementOffsets[j]);
var quadrant = calcQuadrant(elementOffsets[i], elementOffsets[j]);
if (closestPoints[quadrant] == undefined || calcDistanceSquared(elementOffsets[i], elementOffsets[closestPoints[quadrant]]) > distance) {
closestPoints[quadrant] = j;
}
}
}
var closestElements = [];
for (var j = 0; j < closestPoints.length; j++) {
closestElements[j] = elements[closestPoints[j]];
}
$(elements[i]).data('keyNav', closestElements);
}
}
// Returns the distance between two points squared.
function calcDistanceSquared(offset1, offset2) {
...
}
// Returns 0, 1, 2 or 3 for left, up, right and down respectively.
// If a point is EXACTLY 45 degrees it will be classified as either left / right.
function calcQuadrant(offset1, offset2) {
...
}
答案 0 :(得分:1)
我已经考虑过了,我想我有解决方案。 证明草图如下:
假设您在平面中有一个有限点数(R ^ 2)。采取任意点,称之为目的地。然后采取任何其他观点。这一点将R ^ 2分为四个象限,因为你用红色绘制。根据定义,目的地位于这四个象限中的一个。向那个方向移动。可能发生以下两种情况之一:
1)你到达目的地并且你已经完成了
2)你移动到另一个点。
如果是2,那么你已经走得更近了(编辑:1-norm距离,d((x1,y1),(x2,y2))= | x1-x2 | + | y1-y2 |)。这需要更多证据,但我只是草绘。目的地现在处于这个新点的某个象限。
现在请注意,如果重复此操作,请始终朝目的地方向靠近一步(可能会改变每一步),您到目的地点的距离将减少每一步;因为距离总是在减少,所以你再也不能重新考虑一个观点了。所以,如果你有一定数量的积分,你最终会到达目的地。