c++ - 计算立方体/长方体的边界框/缺失点

标签 c++ c math vector 3d

enter image description here

目前我正在尝试根据情况计算矩形/正方形的点(在 3D 空间中每个点都是一个 3D vector )。

我的问题是我不是数学天才。我在这两种情况下都工作得很好。

给定点为 0 和 6,通过 Origin + min 和 origin + max 计算。原点并不总是在地面上,也可以在高处。我不知道为什么会这样。

对于立方体: 获取 0 和 2 之间的点(称为 D),并将 vector D->0 旋转 90° 和 -90° 获取 6 和 2 之间的高度,将它们应用到所有点,您就达到了立方体的所有点。

对于长方体: 我假设 vector 6->2 与 6->5 相同,因此计算与之前相同的原理,通过查看 6->2 的 z 轴然后将它们应用在给定点 6、0 和计算得到的高度第 4 点和第 2 点。

这两种方法本身都有效,但我想问的是,是否有人知道一种方法,既可以比逐个计算所有点更容易/更快地组合获取这些点,又可以使用一种无​​论如何都有效的方法生成的盒子的形状(适用于长方体和立方体)。

预先感谢任何愿意花时间讨论此事的人。 问候。

进一步可视化我想要实现的目标。橙色 = 原点 + 最小值,蓝色 = 原点 + 最大值。 原点是世界空间中的一个点,最小值和最大值都是定义盒子点的 3D vector 。 Ingame screenshot.

Vector* Vector::CreateBoundingBox(const Vector& bb_min, const Vector& bb_max) const {
    static Vector retVertices[8];
    Vector vecInvmin;
    float fHeight;
    vecInvmin = bb_min * -1;

    retVertices[0] = *this + bb_min;
    retVertices[1] = *this + bb_min.RotateOnZ(90);
    retVertices[2] = *this + vecInvmin;
    retVertices[3] = *this + vecInvmin.RotateOnZ(90);

    fHeight = (*this + bb_max).Z - retVertices[6].Z - retVertices[2].Z;
    memcpy(&retVertices[4], &retVertices[0], sizeof(Vector) * 4);
    for (__int32 i = 4; i < 8; i++) {
        retVertices[i].Z += fHeight;
    }
    return retVertices;
}

最佳答案

这是一个经过测试的边界框计算代码。

BoundingBox::BoundingBox()
{
    MaxEdge = Vector3(-999.0);
    MinEdge = Vector3(999.0);
}
void BoundingBox::addPointsToCalculateBoundingBox(Vector3 point)
{
    if (point.x > MaxEdge.x)
        MaxEdge.x = point.x;
    if (point.y > MaxEdge.y)
        MaxEdge.y = point.y;
    if (point.z > MaxEdge.z)
        MaxEdge.z = point.z;

    if (point.x < MinEdge.x)
        MinEdge.x = point.x;
    if (point.y < MinEdge.y)
        MinEdge.y = point.y;
    if (point.z < MinEdge.z)
        MinEdge.z = point.z;
}

关于c++ - 计算立方体/长方体的边界框/缺失点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39303047/

相关文章:

c++ - 尝试在 C++ 中创建一个按时间顺序存储值而不是向后存储所有内容的单链表

c++ - 可见性生效时如何导出公共(public)内部/嵌套类?

python - 系统错误 : <built-in function xxx_iterator> returned a result with an error set

math - 如何使物体沿弧线运动?

math - 主成分和因子分析

c++ - 具体什么是运行时库?

C 中更清晰的正则表达式代码?

找不到-lpthread

与 C 语法混淆(与指针和符号有关)

Python:max/min 内置函数取决于参数顺序