我正在寻找一种计算位置是否在旋转立方体内的方法。
我拥有以下位置的信息:(x,y,z),旋转(x,y,z)和大小(x,y, z)。 我为此使用Javascript,我尝试了与Minecraft插件中相同的方法,但是当时它不包括旋转:
x >= min.x &&
x <= max.x &&
y >= min.y &&
y <= max.y &&
z >= min.z &&
z <= max.z
我该怎么做?
答案 0 :(得分:0)
很可能,您已经为长方体进行了转换,包括定位,缩放和旋转。您可以使用此变换(更具体地说,是它的逆变换)将任意点变换为长方体的局部坐标系。在那儿,很容易检查点是否在立方体内。
我将在此处进行一些假设。如果它们与您的方案不完全匹配,则需要稍作修改。但是原理保持不变。我将假定标准立方体是轴对齐的,并且在(0, 0, 0)
和(1, 1, 1)
之间。我进一步假设该位置参考下角。然后,您计算总体转换(您很可能已经拥有)为:
T = translate(position) * rotation * scale(size)
如果我们需要确定点p
是否在立方体内,请使用T
的逆矩阵对其进行变换:
pInLocalSpace = inverse(T) * p
最后检查它是否在标准多维数据集中:
if(pInLocalSpace.x >= 0 && pInLocalSpace.x <= 1
&& pInLocalSpace.y >= 0 && pInLocalSpace.y <= 1
&& pInLocalSpace.z >= 0 && pInLocalSpace.z <= 1)
; //point is inside the cube
else
; //point is outside of the cube