【问题标题】:how can i calculate if a location is inside 3d cube我如何计算一个位置是否在 3d 立方体内
【发布时间】:2018-08-28 20:05:10
【问题描述】:

我正在寻找一种方法来计算一个位置是否在一个带有旋转的立方体内。

我有位置(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

我该怎么做?

【问题讨论】:

  • 这是为了游戏吗?如果是这样,您会在gamedev.stackexchange.com 上找到很大的帮助。这仍然是一个很好的问题。
  • 是的,我也会在那里发帖,谢谢!

标签: javascript node.js math location cube


【解决方案1】:

很可能,您已经对长方体进行了变换,其中包括定位、缩放和旋转。您可以使用此变换(更具体地说,它的逆变换)将任何点变换到长方体的局部坐标系中。在那里,很容易检查点是否在立方体内。

我将在这里做一些假设。如果它们与您的方案不完全匹配,您需要稍微修改方法。但原理是一样的。我将假设标准立方体是轴对齐的并且在(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

【讨论】:

  • 您好,感谢您的回复,如果我这样做,它会像红框一样检查它:prntscr.com/koe1d4 而不是倾斜的脸
  • 那么您的变换似乎缺少旋转。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多