假设您有一个要测试的3D点,另外两个3D点代表一个立方体的最大值和最小值。
在最坏的情况下使用6个条件语句的显而易见的解决方案如下:
if (point.x < cubemin.x || point.y < cubemin.y || point.z < cubemin.z
|| point.x > cubemax.x || point.y > cubemax.y || point.z > cubemax.z)
return false; //is not within cube
return true; //is within cube
条件语句是一些计算成本最高的指令。是否有任何方式来减少所需的检查次数?在这种情况下,表现至关重要。
答案 0 :(得分:2)
在数学上,没有其他方法可以解决最多6次比较。
然而,在计算机体系结构方面,可以并行完成所有这些工作。 矢量计算机可以并行执行许多类似的操作(例如最大值和最小值的比较等)。
因此,这取决于您的程序将在哪个平台上实现,以及该平台是否提供了一些向量指令。
或者非常,如果您的工作非常重要,您可以尝试制作自己的ASIC CPU芯片。
答案 1 :(得分:2)
有减少测试次数的技巧(我不建议使用它......):
假设所有坐标都是无符号整数,则xmin <= x && x <= xmax
可以缩减为x - xmin <= xmax - xmin
。
xmin <= x && x <= xmax
,则会按预期返回true
。xmax < x
,那么x - xmin > xmax - xmin
,则会按预期返回false
。x < xmin
,则x - xmin
回绕(提供MAX_UINT + 1 + x - xmin
)和xmax - xmin < MAX_UINT + 1 + x - xmin
,这样会按预期返回false
。