在2D平面上查找无法访问的点

时间:2013-02-03 00:41:23

标签: javascript jquery graph point proof

我一直致力于JavaScript / JQuery代码,它允许输入框之间的箭头键移动(是的,我知道这打破了标准UI)。

通过循环遍历每个元素并在每个方向(左,右,上和下)找到最接近的元素来工作。

实施例

P1:(0,0),P2:(1,0),P3:(0,2)

P1有一个点向右(P2),一个点向上(P3) Point 1

P2有一个点向左(P1)和一个点向上(P3) 没有图片

P3有两个点(P1和P2),但P1更接近 Point 1

因此最终的动作是:

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) {
    ...
}

1 个答案:

答案 0 :(得分:1)

我已经考虑过了,我想我有解决方案。 证明草图如下:

假设您在平面中有一个有限点数(R ^ 2)。采取任意点,称之为目的地。然后采取任何其他观点。这一点将R ^ 2分为四个象限,因为你用红色绘制。根据定义,目的地位于这四个象限中的一个。向那个方向移动。可能发生以下两种情况之一:
1)你到达目的地并且你已经完成了 2)你移动到另一个点。

如果是2,那么你已经走得更近了(编辑:1-norm距离,d((x1,y1),(x2,y2))= | x1-x2 | + | y1-y2 |)。这需要更多证据,但我只是草绘。目的地现在处于这个新点的某个象限。

现在请注意,如果重复此操作,请始终朝目的地方向靠近一步(可能会改变每一步),您到目的地点的距离将减少每一步;因为距离总是在减少,所以你再也不能重新考虑一个观点了。所以,如果你有一定数量的积分,你最终会到达目的地。