lengthSq
lengthSq
计算一个向量长度的平方,为距离比较提供了高性能的替代方案。
核心优势
其核心优势是性能。通过避免昂贵的开平方根运算,它在任何只需比较距离大小而无需确切距离的场景下都显著更快。同时,它通过明确的命名提升了代码的可读性和意图清晰度。
常见用途
高效的范围检测(如光源剔除)
基于物理的光照衰减(平方反比定律)
创建非线性径向渐变(抛物线形)
如何调整
其输出值呈二次方(如 y=x²)增长,与 `length` 的线性增长不同。这会创造出在中心点附近非常柔和、而在边缘急剧变化的效果。将其输入向量缩放 `s` 倍,会使其输出值缩放 `s²` 倍,从而可以精确控制基于距离的效果的大小和衰减。
代码示例
1// 使用平方距离实现物理上更准确的光照衰减
2const distSq = lengthSq( pixelPos.sub( lightPos ) );
3const attenuation = float(1.0).div( float(1.0).add( distSq ) );