Java 计算两个矩形棱柱体是否接触/相交

Java 计算两个矩形棱柱体是否接触/相交,java,math,shapes,Java,Math,Shapes,我在计算两个矩形棱镜是否接触或重叠时遇到了一些困难。我只有两个矩形棱镜的高x,Y,Z和低x,Y,Z。以下是我到目前为止的情况: public boolean overlaps(AreaSelection other) { boolean Xs = (lowX <= other.getHighestX()) && (other.getLowestX() <= highX); boolean Ys = (lowY <= other.getHi

我在计算两个矩形棱镜是否接触或重叠时遇到了一些困难。我只有两个矩形棱镜的高x,Y,Z和低x,Y,Z。以下是我到目前为止的情况:

    public boolean overlaps(AreaSelection other) {
    boolean Xs = (lowX <= other.getHighestX()) && (other.getLowestX() <= highX);
    boolean Ys = (lowY <= other.getHighestY()) && (other.getLowestY() <= highY); 
    boolean Zs = (lowZ <= other.getHighestZ()) && (other.getLowestZ() <= highZ);
    return (Xs && Ys && Zs);        
}
公共布尔重叠(区域选择其他){

布尔值Xs=(低x如果棱镜未旋转,则您的方法是正确的,否则无法计算它们是否仅与这些值重叠。

当且仅当坐标轴上的三对投影间隔全部重叠时,两个边平行于坐标轴的矩形棱镜重叠

因此,有一个“实用”方法来检查间隔的重叠是有意义的,我们调用了三次该方法来检查棱镜的重叠。我们假设调用该方法时间隔的端点顺序正确:

public boolean overlap_1d(double aLow, double aHigh, double bLow, double bHigh)
{
    if (aLow <= bLow) return (bLow <= aHigh);
    /* else aLow > bLow */
    return (aLow <= bHigh);
}

注意,在这种方法中,重叠可能由单个交点组成(无论是一维还是三维).

当您应该使用实例变量时,无需使用getter方法。否则,我觉得它很好。尽管您必须小心,以防一个棱柱比另一个小,并且prismA驻留在prismB中,但您的方法将失败。因此,边不重叠,但a在B中。因此,如果您想将其计算为重叠,则必须有效吃了这个。哇,这是个好主意。谢谢,我会测试这个!好主意。套用Knuth的话,我只是证明了这个程序是正确的,我还没有实际运行它来看看它是否有效!
public boolean overlaps(AreaSelection other)
{
    boolean Xs = overlap_1D(lowX,highX,other.getLowestX(),other.getHighestX());
    boolean Ys = overlap_1D(lowY,highY,other.getLowestY(),other.getHighestY());
    boolean Zs = overlap_1D(lowZ,highZ,other.getLowestZ(),other.getHighestZ());
    return (Xs && Ys && Zs);        
}