给定3D坐标系和具有非负起始点和非负大小的矩形棱镜(例如,从(0, 2, 5)开始并且具有(9, 20, 5)的大小):如何最好地检查另一个矩形棱镜是否已经与其中一个棱镜相交在坐标系中?最终,目标是对所有存在的棱镜进行此项检查,能够测试一个棱镜就足以完成这项任务。

信息:起始点和大小为3个元组的非负多头。我正在寻找一种速度适中的优雅解决方案。

我的项目使用Java,但任何数学公式,伪代码或描述都绰绰有余。

最佳答案

假设您有两个棱镜A和B。如果B与A相交,那就是没有完全向右,向左,向上,向下等。

if not (B.x > A.x+A.dx or B.x+B.dx < A.x or
        B.y > A.y+A.dy or B.y+B.dy < A.y or
        B.z > A.z+A.dz or B.z+B.dz < A.z)
        // B intersects A

09-27 05:38