gpt4 book ai didi

java - 确定 2 个直角棱镜是否接触/相交

转载 作者:行者123 更新时间:2023-11-29 05:49:34 25 4
gpt4 key购买 nike

我无法确定 2 个直角棱镜是否接触或重叠。我只有两个直角棱镜的高 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);
}

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

最佳答案

两个棱柱与坐标轴平行的直角棱柱重叠当且仅当坐标轴上的各自三对投影间隔全部重叠。

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

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

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

关于java - 确定 2 个直角棱镜是否接触/相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14449746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com