WPF 3D:检查多维数据集是否可以完全包含另一个多维数据集

时间:2011-02-09 18:17:29

标签: wpf 3d drag-and-drop bounds-checker modelvisual3d

我正在研究drop&放下3D。我已经创建了带有墙(立方体)的3D空间(房间),这些空间充当了对象(占据较小的立方体)的占位符。

我该如何搞清楚:

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

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

我有房间的范围和对象(ModelVisual3D.Content.Bounds)和对象被删除的点。

我在想我必须做一些数学运算来确定对象是否放置在那个点上然后它将完全在边界内。

想法/想法/指针赞赏。

3 个答案:

答案 0 :(得分: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;
}

请注意,这不适用于任意方向的盒子,只能在轴对齐的情况下使用。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

1。拾取点A.(点可以是内部立方体CubeIn的一角)

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

2。检查CubeOut(Outercube)内部的

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

如果点位于第二个立方体内,则表示第一个立方体位于第二个立方体内。(为什么?因为如果立方体位于其他立方体内部。因此内部立方体上的每个点都将位于外部立方体内)

4。其他CubeIn不在CubeOut

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