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

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

我的问题是因为我不是数学方面的天才。无论哪种情况,我都能正常运行。

给定的点是0,则计算出的原点+最小值和原点+最大值为6。原点并不总是在地面上,也可以升高。我不知道该原因的原因。

对于多维数据集:
获得0到2之间的点(称为D),并将向量D-> 0旋转90°和-90°。获得6到2之间的高度,将它们应用于所有点,并且已经达到了立方体的所有点。

对于长方体:
我假设向量6-> 2与6-> 5相同,因此在通过查看6-> 2的z轴然后将其应用到给定的点6、0以及点4和2

两种方法本身都可以工作,但我想问的是,是否有人知道一种方法可以比单点计算所有点更容易/更快地组合获取这些点,以及一种无论形状如何都可以工作的方法结果框的大小(适用于长方体以及立方体)。

在此先感谢您愿意在此问题上花一些时间的人。
问候。

我要实现的进一步可视化。橙色=起点+最小值,蓝色=起点+最大值。
原点是世界空间中的一个点,最小值和最大值均为定义盒子点的3D矢量。c++ - 计算边界框/立方体/长方体的缺失点-LMLPHP

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/

10-10 19:34