投射光并检测给定点是否落入其中的算法?

gen*_*dum 6 language-agnostic algorithm

基本上,像手电筒一样投射光线,并检查一个点 - 我只需要检查一个点,但是能够检查一个以上也没有坏处 - 是在它所照亮的区域内.

另外,我假设大多数(全部?)算法都在2D/3D中工作,但是可以使用在N维空间中工作的算法吗?我只对它是否可用于具有合理复杂性的任意数量的维度感兴趣.

Dre*_*all 2

假设您有一个指向n光锥方向的归一化向量、位于 的光Pl、位于 的测试点Pp和半锥角theta,您可以像这样进行测试(与空间的维数无关):

vector Vl = Pl + n
vector Vp = Pp - Pl

phi = acos(dot(Vl, Vp) / (||Vl|| * ||Vp||))

if phi <= theta
  p in light cone
else
  p not in light cone
Run Code Online (Sandbox Code Playgroud)

这里 dot(a,b) 是两个向量 (a1*b1 + ... + an*bn) 和 ||a|| 的点积 是向量 a 的大小,sqrt(a1*a1 + ... + an*an)。

基本思想是计算出光束中心线与从光源到感兴趣点的矢量之间的角度。如果该角度大于聚光灯(半)角,则感兴趣点位于光束之外,否则位于光束内部。

请注意,真实的灯光并不会如此急剧地截止,但这将帮助您入门。