Java - 快速找到四个极端角落的方法"在一组点?

时间:2016-05-19 14:13:51

标签: java optimization coordinates

假设我们给出了一组随机坐标的x和y界限(让我们调用边界A和B),例如x <= 10,y <= 10.最快的方法是什么找到最接近(0,0),(A,0),(A,B),(0,B)的四个点?如果更快,则点可以从最小到最大排序。这就是我目前所拥有的,但我觉得这可以加快:

 private void quadrilateral(){
    NW = null;
    NE = null;
    SE = null;
    SW = null;
    Point NWbound = new Point(0,B);
    Point NEbound = new Point(A,B);
    Point SEbound = new Point(A, 0);
    Point SWbound = new Point(0,0);
    for (Point p : points){
        if (NW == null || p.distance(NWbound) < NW.distance(NWbound)){
            NW = p;
        }
        if (NE == null || p.distance(NEbound) < NE.distance(NEbound)){
            NE = p;
        }
        if (SE == null || p.distance(SEbound) < SE.distance(SEbound)){
            SE = p;
        }
        if (SW == null || p.distance(SWbound) < SW.distance(SWbound)){
            SW = p;
        }
    }

}

我还没有能够使用有序列表,而且我甚至不确定订购列表是否会有所帮助。

1 个答案:

答案 0 :(得分:0)

为了加快速度,请使用p.distanceSq()而不是p.distance()。此外,保存四个最接近的距离平方值中的每一个,这样您就不必为每次迭代再次计算它们。