0

我正在研究 3D 中的拖放。我已经创建了带有墙壁(立方体)的 3D 空间(房间),这些墙壁(立方体)充当被丢弃的物体(假设是一个较小的立方体)的占位符。

我该如何弄清楚:

如果用户将对象放在房间的边缘,那么房间是否可以完全包含该对象?

意思是,我不希望物体部分在房间里,部分在外面。理想情况下,我会取消放置操作/将其移动到一个点,以便房间安全地包含该对象。

我有房间和对象的边界(ModelVisual3D.Content.Bounds)以及对象被丢弃的点。

我想我必须做一些数学运算才能确定对象是否放置在该点,然后它将完全在边界房间内。

想法/想法/指针表示赞赏。

4

3 回答 3

0

对于任何轴对齐的框,由于您使用的是边界,这似乎是这种情况,一个简单的测试可以判断一个轴对齐的框是否包含在另一个框中。

给定以下Box课程:

class Box 
{
  Vector3 minEdge;
  Vector3 maxEdge;
}

您可以轻松地在其中包含一个Box测试包含的方法:

bool IsInside(Box other)
{
  return maxEdge.X <= other.maxEdge.X &&
         maxEdge.Y <= other.maxEdge.Y &&
         maxEdge.Z <= other.maxEdge.Z &&
         minEdge.X >= other.minEdge.X &&
         minEdge.Y >= other.minEdge.Y &&
         minEdge.Z >= other.minEdge.Z;
}

请注意,这不适用于任意方向的框,仅适用于轴对齐。

于 2011-02-09T21:15:30.320 回答
0

为了使 3D 中的拖放更容易,您可以实现(可选)捕捉系统。

要检查一个盒子是否包含另一个盒子,只需检查一个盒子的所有角落。测试每个角,看它是否在另一个盒子的面的“内部”(或外部)。如果所有的角都在里面,那么盒子就在里面。

这适用于所有框,而不仅仅是轴对齐的框。

于 2011-02-09T21:42:10.350 回答
0

1. 选取A点(点可以是内立方体CubeIn的一个角)

从一个立方体中选择一个点。(我假设我们要测试一个立方体完全在另一个立方体内。意味着没有交叉)。

2.检查A inside CubeOut (Outercube)

3.如果A在CubeOut里面比CubeIn完全在CubeOut里面

如果点在第二个立方体内,则意味着第一个立方体在第二个立方体内。(为什么?因为如果一个立方体在另一个立方体内。所以内立方体上的每个点都将在外立方体内)

4. Else CubeIn 不在 CubeOut 里面

这将适用于所有类型的实体实体(球体、圆锥体......)。

于 2014-04-29T10:50:34.180 回答