C++ 顶点定义框算法中的点?

C++ 顶点定义框算法中的点?,c++,algorithm,geometry,C++,Algorithm,Geometry,如何测试一个点是否位于仅由其8个点或其6个四边形定义的三维长方体中?(无法访问法向量) 长方体由三角形组成,但每侧的两个多边形对齐,因此可以将其视为四边形。假设点的顺序已知,则可以计算法向量。这种测试不需要将它们标准化,因此成本不会过高。如果你已经知道它是一个长方体,那么你只需要计算出两条法线,因为你可以用叉积得到第三条法线,然后使用其他点来计算距离。显然,无论如何,你都在交叉生产以获得法线,所以这更多的是一个关于你想向谁公开什么信息的问题 如果这些点没有已知的顺序,那么您可能可以应用Quick

如何测试一个点是否位于仅由其8个点或其6个四边形定义的三维长方体中?(无法访问法向量)


长方体由三角形组成,但每侧的两个多边形对齐,因此可以将其视为四边形。

假设点的顺序已知,则可以计算法向量。这种测试不需要将它们标准化,因此成本不会过高。如果你已经知道它是一个长方体,那么你只需要计算出两条法线,因为你可以用叉积得到第三条法线,然后使用其他点来计算距离。显然,无论如何,你都在交叉生产以获得法线,所以这更多的是一个关于你想向谁公开什么信息的问题


如果这些点没有已知的顺序,那么您可能可以应用QuickHull的微型版本-从初始三角形开始,您应该发现您已经有一个真实的边面(在这种情况下,您可以使用该法线,并在该法线的另一个极端找到相关点,再加上相互正交的要求,以获得所有三条法线)或者一个步骤至少提供两条真实边,当前面的局部点集变空时,您会发现这些边。

一个疯狂的想法,也许:-

  • 在1x1像素视口上设置三维正交投影
  • 设置摄影机和近剪裁平面,使关注点位于近剪裁平面上
  • 渲染长方体而不进行任何剔除
  • 如果仅渲染一个像素,则点位于框内,渲染0或2个或更多像素,则点位于框外

你可以用你的点作为头部,每个四边形的4个顶点作为底部,形成6个方形棱锥体,然后对方形棱锥体的体积求和。如果体积之和等于盒子的体积,则点在盒子里。如果体积之和大于盒子的体积,则点在盒子外面(体积之和永远不会小于盒子体积)


为了计算每个方形棱锥体的体积,你可以把它分成两个四面体,它们的体积可以用a轻松计算。你也可以用混合向量积计算长方体的体积。

你试过问这个问题吗?我想这是个疯狂的想法:)我对这类问题不太了解,但你的答案不是做了很多工作吗?然后需要用简单的旧数学来确定答案吗?我想这取决于你已经掌握了哪些光栅化工具?它还建议了另一种线性代数方法-如果一条线段从点指向无穷远在任何方向与长方体正好相交一次,则点位于长方体内部。如果光栅化,则通过剪裁和投影执行该测试。