为了好玩,我正在优化一个更大的算法(它与视线计算有关)。该算法的一部分是根据它们相对于原点的角度对一堆二维顶点进行索引。问题是,我实际上并不需要精确的角度,我所需要的只是可靠地检测一个基元是否在角度方面与另一个基元重叠,因此昂贵的三角函数被淘汰而廉价的伪数学出现了!
这是我自己想出来的:
orientation(x, y) {
const sign = 1 - 2 * (x * y < 0);
return x / (x * sign + y) + ((x < 0) + (sign < 0)) * 2;
}
它运作良好,它吐出一个从 0 到 4 的值,如果我有一个基元,例如从方向 0 - 2 延伸,另一个从 1 - 3 延伸,那么我知道一个事实,它们可能重叠并且他们之间可能需要进行更昂贵的计算。
你可能想向我推荐 AABB 或空间树——我已经在早期阶段做了这些。
问题是 - 是否有更有效的函数可以从表示其相对于 (0, 0) 的角度的 2D 向量中获取单个标量值?这个值需要保证的唯一质量是重叠范围也需要在真实角度上实际重叠。