Javascript 在二维平面上查找不可访问的点

Javascript 在二维平面上查找不可访问的点,javascript,jquery,graph,point,proof,Javascript,Jquery,Graph,Point,Proof,我一直在研究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 ->

我一直在研究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:(0,0)、P2:(2,0)、P3:(1,4)中的点P3不可访问


下面是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) {
    ...
}
功能箭头键导航(元素){
//获取每个元素的位置。
var ElementOffset=[];
元素。每个(功能(键、元素){
ElementOffset[key]=$(element.offset();
});
//在每个方向上找到最近的点,并将这些点存储在数据(“keyNav”)中以供以后使用。
对于(var i=0;i距离){
闭合点[象限]=j;
}
}
}
var收盘价=[];
对于(var j=0;j
我考虑了很多,我想我有了解决办法。 验证草图如下所示:

假设平面(R^2)中的点的数量是有限的。取任意一点,称之为你的目的地。然后再谈其他问题。这一点将R^2分为四个象限,如您用红色绘制的。根据定义,目的地位于这四个象限之一。朝那个方向走。可能发生以下两种情况之一:
1) 您到达目的地,就完成了
2) 你移到另一点

如果为2,则表示您已靠近(编辑:按1-norm距离,d((x1,y1),(x2,y2))=| x1-x2 |+| y1-y2 |)。这需要更多的证据,但我只是在画草图。目标现在位于这个新点的某个象限中


现在请注意,如果您重复此操作,始终向目的地方向靠近一步(这可能会改变每一步),您到目的地点的距离将每一步减小;您永远不能重新访问某个点,因为您的距离总是在减小。所以,如果你的积分有限,你最终会到达目的地

你的问题有点分散在不同的方面。我建议把它拆开,从一个关于是的,有限点的问题开始。关于2),我不确定你是否总是离得更近。例如,点(0,0),P1(9,10),然后加上P2(13,5)。这会将到DP的距离从sqrt(181)更改为sqrt(194)。对不起,是的,这取决于您对距离的概念。我认为这个争论可以通过使用1-范数(也称为出租车度量)来解决。哦,是的,出租车几何结构非常适合解决这个问题。非常感谢你的解释。