【问题标题】:Fast algorithm for detecting if a rectangular shape intersects a rectangular boundary检测矩形是否与矩形边界相交的快速算法
【发布时间】:2014-08-08 03:21:06
【问题描述】:

假设你有一个院子,院子周围有栅栏,可能看起来像这样:

 ______  ________
|      |_|      _|
|              |_
|        _    ___|
|__     |_|  |  
   |         |__
___|      _     |
|        | |    |_
|________| |______|

Don't ask why it's a weird shape, it's your yard, I didn't make it. 

..中间的那个小盒子是一些任意的方形物体。如果该物体向您院子边缘的任何方向移动,您将如何检测该物体何时与您的栅栏发生碰撞?

如果您的院子大了数千倍并且有许多边缘需要跟踪怎么办?那么你将如何有效地解决这个问题呢?

【问题讨论】:

    标签: algorithm collision-detection 2d-games


    【解决方案1】:

    把院子看成一个大矩形,去掉几个“负”方块。

    将这些负方块的位置存储在quad tree 中。

    要检查碰撞,请探测树中与对象相邻的四个方格。

    检测操作的时间复杂度取决于四叉树变体的选择,但您可以期望负平方数的对数时间。

    【讨论】:

    • 所以基本上,如果树中的四个方块中的任何一个与对象共享一些或任何位置,我就会发生碰撞?这可能行得通。
    • 我给出的简单解决方案只在树中存储点(位置),而不是范围或矩形。因此,您的一个或多个相邻位置在树中,或者不在树中。这里没有“一些”。存在更复杂的变体,它们使用位置分组来减少在树中存储的内容。
    猜你喜欢
    • 2011-10-31
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 2017-01-24
    • 2015-12-25
    相关资源
    最近更新 更多