我正在尝试提出一种通用算法,用于检测点是否位于使用间隔定义的m维超矩形的边界之内或之上。
对于2D情况,它是直截了当的,并且可以使用射线投射等技术将点位于多边形内。但是,如何检查一个m维超矩形?有没有办法说这样的超矩形方程,并检查点是否在边界之内或之上?
我正在尝试用C ++实现,有没有已知的库可能会有所帮助?
谢谢!帮助非常感谢!
答案 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
个拐角点。
(这当然是假设您不限于轴对齐的框,在这种情况下,答案当然是微不足道的)