1

我在确定 2 个矩形棱镜是否接触或重叠时遇到了一些麻烦。我只有两个矩形棱镜的 highX,Y,Z 和 lowX,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);        
}

有谁知道这是否正确?如果没有,解决方案是什么?谢谢!

4

2 回答 2

2

当且仅当坐标轴上相应的三对投影间隔都重叠时,两个边平行于坐标轴的直角棱柱重叠。

因此,有一个“实用程序”方法来检查间隔的重叠是有意义的,我们调用了三次来检查棱镜的重叠。我们假设这个方法将在间隔的端点正确排序的情况下被调用:

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

原始代码将变为:

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);        
}

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

于 2013-01-22T03:26:26.227 回答
1

如果棱镜没有旋转,则您的方法是正确的,否则无法计算它们是否仅与这些值重叠。

于 2013-01-22T01:07:49.613 回答