小编sin*_*sro的帖子

在 Unity 中查找一组 3D 点的定向边界框

我有一组 3D 点,或者实际上是小球体,我需要使用 Unity 3D 将它们用尽可能小的 3D 框包围。

在封闭框只能移动和缩放的情况下,解决方案非常简单,您只需迭代所有点并封装每个点即可。但我还需要找到盒子的最佳方向。

因此,为了用 ASCII 来说明问题,给出一个只有两点的基本 2D 场景:

Y
| * (0,1)
|
|
|
|               * (1,0)
-------------------- X
Run Code Online (Sandbox Code Playgroud)

使用规则增长的边界框,您最终会得到一个非常大的封闭框,其中大部分为空白,而在这种情况下,我需要一个非常薄且绕 Z 轴旋转约 45 度的框。基本上只是一条连接两点的线。

但我永远不知道需要将多少点组合在一起。正如前面提到的,它必须以 3D 模式运行。

到目前为止,我只尝试了基本方法,即不旋转封装盒以获得最佳配合。结果确实离我需要的还很远。

我正在考虑一种基于遗传算法的强力方法,我生成大量随机框,然后简单地选择面积最小的框,同时仍包含所有点。然而,这太慢了。

GameObject go = points[0];
Bounds b = new Bounds(go.transform.position,go.transform.localScale);

for (int i=1;i<points.Count;i++)
{
    go = points[i];
    b.Encapsulate(new Bounds(go.transform.position, go.transform.localScale));
}

GameObject containingBox = Instantiate(boxPrefab);
containingBox.transform.position = b.center;
containingBox.transform.localScale = b.size;
containingBox.transform.rotation= Quaternion.Identity; //How to calculate?
Run Code Online (Sandbox Code Playgroud)

c# geometry unity-game-engine

5
推荐指数
1
解决办法
7250
查看次数

标签 统计

c# ×1

geometry ×1

unity-game-engine ×1