gpt4 book ai didi

algorithm - 植绒/群体算法 : Field Of view specified by angle in 3D

转载 作者:行者123 更新时间:2023-12-02 02:29:32 26 4
gpt4 key购买 nike

我正在尝试在Unity 3D中制作boids算法。

我遇到了一个问题:如何实现特定角度的视野?

360 度很容易 - U 仅检查两个主体之间的距离。但我不希望机器人能够看到自己的身后。我还希望能够在 Inspector 中更改视角,因此它必须基于计算。

如果有任何想法,我将不胜感激:(

enter image description here enter image description here

我已经尝试过使用圆锥体的网格碰撞器,但效果不佳。 - 不适用于 180 及以上。所以我正在寻找计算这个的最佳方法。

最佳答案

假设 boid 位于点 p = (p.x, p.y, p.z),朝向某个点 h = (h.x, h.y, h.z),我们想要了解 q = (q.x, q.y, q.z) 处的物体是否在 boid 的视野内。

余弦定律为我们提供了一个关于物体的航向和物体到达物体的路径之间的角度φ的余弦公式:

          (h−p) · (q−p)
cos(φ) = ---------------
||h−p|| ||q−p||

= (dx1*dx2 + dy1*dy2 + dz1*dz2) /
(sqrt(dx1*dx1 + dy1*dy1 + dz1*dz1) * sqrt(dx2*dx2 + dy2*dy2 + dz2*dz2))

哪里

dx1 = h.x - p.x
dy1 = h.y - p.y
dz1 = h.z - p.z
dx2 = q.x - p.x
dy2 = q.y - p.y
dz2 = q.z - p.z

给定一些角度ρ(无论你的余弦函数接受什么单位,通常是弧度),超过该角度boid都看不到(将视野设置为),我们有

φ > ρ  if and only if  cos(φ) < cos(ρ),

这样我们就可以预先计算cos(ρ),然后使用上面的公式进行重复测试。

为了避免被零除和其他数字问题,您可能需要检查除法的分母是否非常小,如果是,则声明 boid 可以感觉到任何物体,即使是在其视野之外。

关于algorithm - 植绒/群体算法 : Field Of view specified by angle in 3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65265444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com