sca*_*lot 3 algorithm simulation math artificial-intelligence angle
我正在尝试在 Unity 3D 中制作 boids 算法。
我遇到了一个问题:如何实现特定角度的视野?
360 度很容易 - U 仅检查两个主体之间的距离。但我不希望机器人能够看到自己的身后。我还希望能够在 Inspector 中更改视角,因此它必须基于计算。
如果有任何想法,我将不胜感激:(

我已经尝试过使用圆锥体的网格碰撞器,但效果不佳。- 不适用于 180 及以上。所以我正在寻找计算这个的最佳方法。
假设 boid 正在p = (p.x, p.y, p.z)向某个点 前进h = (h.x, h.y, h.z),并且我们想知道该点的物体是否q = (q.x, q.y, q.z)在 boid 的视野中。
余弦定律为我们提供了一个\xcf\x86计算物体航向和物体到达物体的路径之间夹角余弦的公式:
(h\xe2\x88\x92p) \xc2\xb7 (q\xe2\x88\x92p)\ncos(\xcf\x86) = ---------------\n ||h\xe2\x88\x92p|| ||q\xe2\x88\x92p||\n\n = (dx1*dx2 + dy1*dy2 + dz1*dz2) /\n (sqrt(dx1*dx1 + dy1*dy1 + dz1*dz1) * sqrt(dx2*dx2 + dy2*dy2 + dz2*dz2))\nRun Code Online (Sandbox Code Playgroud)\n在哪里
\ndx1 = h.x - p.x\ndy1 = h.y - p.y\ndz1 = h.z - p.z\ndx2 = q.x - p.x\ndy2 = q.y - p.y\ndz2 = q.z - p.z\nRun Code Online (Sandbox Code Playgroud)\n给定一些角度\xcf\x81(无论你的余弦函数接受什么单位,通常是弧度),经过该角度,boid 都看不到(将视野设置为2\xcf\x81),我们有
\xcf\x86 > \xcf\x81 if and only if cos(\xcf\x86) < cos(\xcf\x81),\nRun Code Online (Sandbox Code Playgroud)\n所以我们可以预先计算cos(\xcf\x81),然后使用上面的公式进行重复测试。
为了避免被零除和其他数值问题,您可能需要检查除法的分母是否非常小,如果是,则声明 boid 可以感觉到任何物体,即使是在其视野之外。
\n