Java 查找两个具有最小-最大点的边界框之间的距离

Java 查找两个具有最小-最大点的边界框之间的距离,java,algorithm,geometry,bounding-box,Java,Algorithm,Geometry,Bounding Box,除了我前面的问题外,我还试图找出两个方框之间的距离: 这是我的盒子类 public class BoundaryVolume { public Point3D min; public Point3D max; } 第一步我找到是否有重叠,然后返回0 否则我会努力寻找距离 这是我的代码: public static double getDistance(BoundaryVolume box1 , BoundaryVolume box2) { if(doOverlap(bo

除了我前面的问题外,我还试图找出两个方框之间的距离:

这是我的盒子类

public class BoundaryVolume {
    public Point3D min;
    public Point3D max;
}
第一步我找到是否有重叠,然后返回0 否则我会努力寻找距离

这是我的代码:

public static double getDistance(BoundaryVolume box1 , BoundaryVolume box2) {
    if(doOverlap(box1 ,box2)) return 0;
    double dis1 = box1.min.distance(box2.min);
    double dis2 = box1.min.distance(box2.max);
    double dis3 = box1.max.distance(box2.min);
    
    double dis4 = box1.max.distance(box2.max);
    double min_disatnce = dis1;
    if(dis2 < min_disatnce) min_disatnce = dis2;
    if(dis3 < min_disatnce) min_disatnce = dis3;
    if(dis4 < min_disatnce) min_disatnce = dis4;
    return min_disatnce;
    
}
public static boolean doOverlap(BoundaryVolume box1 , BoundaryVolume box2)  
{ 
    double x5  = Math.max(box1.min.get_x().get(), box2.min.get_x().get()); 
    double y5  = Math.max(box1.min.get_y().get(), box2.min.get_y().get()); 
    double x6  = Math.min(box1.max.get_x().get(), box2.max.get_x().get()); 
    double y6  = Math.min(box1.max.get_y().get(), box2.max.get_y().get()); 

  
    // no intersection 
    if (x5 > x6 || y5 > y6)  
    { 
        System.out.println("No intersection"); 
        return false; 
    } 
    System.out.println("Has intersection"); 
    return true; 
} 
公共静态双getDistance(BoundaryVolume框1,BoundaryVolume框2){
如果(doOverlap(框1,框2))返回0;
双dis1=box1.min.距离(box2.min);
双dis2=box1.最小距离(box2.最大距离);
双dis3=箱1.最大距离(箱2.最小距离);
双dis4=box1.最大距离(box2.最大);
双最小故障=dis1;
如果(dis2x6 | y5>y6)
{ 
System.out.println(“无交叉口”);
返回false;
} 
System.out.println(“有交叉点”);
返回true;
} 
我明白了: 介于[-350.0,-500.0,0.0)、(350.0,200.0,0.0)]和[-30.0,-680.0,-90.0)、(130.0,-520.0,70.0)]之间的距离为378.0211632871597 看来这是错误的

我试图找出这两个函数中哪些不起作用

你算出a的距离。但真正的最小距离是b或c

此外,您仅检查左上角和右下角圆锥体之间的距离:

在本例中,计算a或b(相同距离)。当你应该计算c,但实际最小距离是d或e之后

不要寻找二维,只需搜索你的圆锥体的x和y之间的较短距离。 较短的距离:

box1_max_x > box2_min_x
box1_max_y > box2_min_y
box2_max_y > box1_min_y
box2_max_y > box1_min_y
box1_max_x > box2_max_x
box1_max_y > box2_max_y
box2_min_y > box1_min_y
box2_min_y > box1_min_y

你不需要计算最小距离,因为你只看圆锥体之间的距离,不计算边数。我将尝试通过基本上你必须像你那样寻找最近的两个角来解决这个问题,然后,拿着这两个圆锥体,返回它的最小距离,边紧挨着另一个角。如果你能更多地指导我如何修理它将对我有很大帮助,谢谢。我做一个解释性的回答。你将不得不冒险一点边界体积我只有左下角(作为最小点)和右上角(作为最大点),我知道这两个点有可能得到距离。但是我错过了一些东西,我不知道是什么,谢谢你是对的。你可以用它推导出另外两个角的坐标。我修改了答案事实上你只是做了所有可能的组合