4
A
回答
2
计算每个立方体每个维度的最小值/最大值,然后相互测试这些值。在立方体标记为1和2的x方向上
XminInt;
if (Xmin1 > Xmax2)
{
// no intersection
}
else if (Xmin1 >= Xmin2)
{
// possible cube intersection
XminInt = Xmin1;
}
else if (Xmin2 <= Xmax1)
{
// possible cube intersection
XminInt = Xmin2;
}
对y和z做最大和重复的操作。如果你在任何路口遇到不相交的情况,那么你可以提前退出。如果您在六个可能的早期退出条款中没有提前退出,那么您将拥有交点立方体的全部六个定义值,即每个维度的最小/最大值。
六个早期回报几乎是一个separating axis方法的最简单的例子。由于你的形状是立方体并且是轴对齐的,所以笛卡尔轴是可能的分离轴。那么测试就是比较上述最小/最大值的一个简单问题。
请注意,我已经在C++中实现了上述方法,并确认它的工作原理。
3
如果立方体未旋转(轴对齐),则尺寸的重叠足以描述立方体的重叠。
考虑2名维问题:
________
| S2 |
____|___ |
| | | |
| |___|____|
| S1 |
|________|
重叠区域是由S1.xmax的宽度描述 - S2.xmin,和S1.ymax的高度 - S2.ymin。要确定减法的顺序,需要一些if
测试。你可能会发现没有任何重叠。要为立方体执行此操作,请考虑除x和y之外的z尺寸。
5
两个非旋转立方体的重叠仍然是一个“盒子”。如果框A的两个角点是(x,y,z)和(x',y',z')(x'> x,y'> y,z'> z)并且框B的两个角点是(A,b,C)和(A 'b',C ')(A'> A,b '> b,C'> C),则重叠量是
max(min(a',x')-max(a,x),0)
* max(min(b',y')-max(b,y),0)
* max(min(c',z')-max(c,z),0)
如何读取公式:
重叠开始于X轴上两个坐标x和a的最大值处,并以a和x的最小值结束。如果'< x(即一个< a'< x'< x'),那么没有重叠,发生的是max(a,x)= x> min(a',x')= a'变成负数,音量为零(因此是外部最大(...,0))项。其他两个轴也是如此。
相关问题
- 1. 重叠立方体
- 2. 如何绘制重叠立方体
- 3. 与两个实体共享地址表
- 4. 两个物体重叠的图案
- 5. 如何在MATLAB中查找更大的立方体中的小立方体?
- 6. GMM给定的立方体体积的点数
- 7. 生成给定体积的所有立方体
- 8. 如何将两列上的立方体看作是一个立方体?
- 9. 在matlab中查找3d峰的体积
- 10. 检查一个完美的立方体
- 11. 用堆叠矩阵绘制立方体
- 12. SQL - 查询立方体
- 13. SSAS:来自多个立方体实例的中央立方体
- 14. 查找两个球体的交点
- 15. WordPress的CORS - 共享字体
- 16. RIA服务 - 两个实体模型共享一个实体名称
- 17. 没有刚体的落体立方体
- 18. 两个物体共享同一个列表
- 19. 跨两个Web服务共享一个实体?
- 20. 查找点时两个球体相交
- 21. 媒体共享CMS网站
- 22. 实体师生共享表?
- 23. 建模共享实体谜
- 24. 共享会话实体
- 25. DDD实体在两个应用程序之间共享
- 26. 查找字体权重值
- 27. 如何在mayavi中正确显示包含非立方体素的体积
- 28. 查找立方体的最近的旋转
- 29. 查找两个节点之间共享的连接节点
- 30. 表面积/体积
这将适用于AABBs。如果一个或两个立方体与笛卡尔坐标轴不对齐,情况如何? – mfaieghi 2017-10-10 22:15:19