如何计算长方体的八个角给定深度和高度以及两点:A(x,y,z)和B(x,y,z)?
只有有限的数据才能计算长方体的八个角/点? 我想通过计算八个vector来制作一个只有两个3Dvector的长方体。
这对A周围的4点是有用的
而对于B的4点
编辑:正如@ DMGregory指出的,我的解决scheme只适用于与Z轴平行的长方体。
我假设你有一个Vector3和一个Matrix3类。 首先,我们来定义一个单位立方体:
(-0.5, -0.5, 0) (0.5, -0.5, 0) (0.5, 0.5, 0) (-0.5, 0.5, 0) (-0.5, -0.5, 1) (0.5, -0.5, 1) (0.5, 0.5, 1) (-0.5, 0.5, 1)
现在,要创建所需的矩形,需要根据高度,深度以及A和B之间的距离来缩放vector。 要做到这一点,你需要一个尺度matrix:
| Depth 0 0 | S = | 0 Height 0 | | 0 0 |A - B| |
哪里| A – B | 是A – B向量的长度
现在长方体有正确的大小。 下一步是旋转它。
因为A和Bvector只定义绕X(俯仰)和Y(偏航)轴的旋转,所以只需要计算这些:
为了方便,让C为A – B。
偏航可以通过丢弃将vector投影到XY平面的y轴来计算。 然后角度变成
yaw = atan(Cy / Cx)
球场有点不同。 你需要vector的长度和z分量:
pitch = arccos(Cz / |C|)
现在你有了角度,你需要构造一个旋转matrix:
| 1 0 0 | | cos(yaw) 0 sin(yaw) | R = | 0 cos(pitch) -sin(pitch) | * | 0 1 0 | | 0 sin(pitch) cos(pitch) | | -sin(yaw) 0 cos(yaw) |
为了得到长方体的角度,你需要把每个长方体的vector,乘以matrix,并添加到它:
newPoint = R * S * point + A