检查点是否位于 m 维矩形内

Check if point lies within m-dimensional rectangle

我正在尝试提出一种通用算法来检测一个点是否位于使用区间定义的 m 维超矩形的边界内或边界上。

对于 2D 情况,它很简单,如果点位于多边形内,则可以使用光线投射等技术。但是,如何检查 m 维超矩形?有没有办法说出超矩形等式并检查点是在边界内还是边界上?

我正在尝试用 C++ 实现它,是否有任何已知的库可以提供帮助?

谢谢!非常感谢帮助!

直截了当的方法有什么问题?

if ((Point.x[0]>= Rect.min[0]) && (Point.x[0] <= Rect.max[0]) && 
 ...
   (Point.x[m-1]>= Rect.min[m-1]) && (Point.x[m-1] <= Rect.max[m-1])) 

当然是按维度循环

如果您将超矩形 (HR) 存储为间隔(即中心坐标 + 范围或开始 + 结束)和旋转的组合,则可以将查询点转换为 HR 的坐标系(通过适当的旋转,平移和缩放)。然后你只需要做2*m绑定检查。

您建议的使用多面体的替代方案可能会消耗性能,因为 m 维 HR 具有 2^m 个角点。

(这当然是假设你不局限于轴对齐的盒子,在这种情况下答案当然是微不足道的)