目前,我正在尝试根据情况计算矩形/正方形的点(在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矢量。
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/