检查点是否在m维矩形内

时间:2018-08-31 17:19:47

标签: c++ math geometry algebra

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

对于2D情况,它是直截了当的,并且可以使用射线投射等技术将点位于多边形内。但是,如何检查一个m维超矩形?有没有办法说这样的超矩形方程,并检查点是否在边界之内或之上?

我正在尝试用C ++实现,有没有已知的库可能会有所帮助?

谢谢!帮助非常感谢!

2 个答案:

答案 0 :(得分:1)

简单的方法怎么了?

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])) 

当然是按尺寸循环的

答案 1 :(得分:0)

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

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

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