加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 你会以什么方式提出一种算法来检测不同对象之间的冲突

发布时间:2020-12-20 11:10:42 所属栏目:Python 来源:网络整理
导读:在开展一个真正有趣的项目时,我遇到了一些问题. 有一个2D世界,有圆球,尖角三角形和瘦线(也许还有其他野生动物).它们都是WorldCreatures的子类.他们可以进入这个世界.当他们相遇时,会发生碰撞. 我想做的是找到一种检测它们之间碰撞的方法.这就是我现在站在的
在开展一个真正有趣的项目时,我遇到了一些问题.

有一个2D世界,有圆球,尖角三角形和瘦线(也许还有其他野生动物).它们都是WorldCreatures的子类.他们可以进入这个世界.当他们相遇时,会发生碰撞.

我想做的是找到一种检测它们之间碰撞的方法.这就是我现在站在的地方:

>对我来说Ball-Ball很简单,我只是计算他们与位置的距离,然后将它们与”尺寸’的总和进行比较.
>球与世界边缘之间的碰撞也很简单 – 我只是检查它的距离,在笛卡尔坐标系中,它很简单.
>更常见的问题是 – 如何检测Line(某些点的起点和终点)或其他物体之间的碰撞?线和点之间的距离也可以很容易地计算,但我想要的是

如果对象A与对象B发生碰撞,则说某种通用方式.现在的代码看起来有点像:

class WorldCreature:
    def detectCollision(self,otherObject):
        # do something 
        if collision:
            self.onCollision(otherObject)
            otherObject.onCollision(self)
class Ball(WorldCreature):
    # someing here
class Line(WorldCreature):
    # someing here

现在,碰撞检测机制应该取决于哪些物体可以碰撞.效果也会如此.

我应该只保留内存中所有对象的列表,并在每一步中循环遍历所有这些对象吗?或者,是否有更好的方法来改善此任务的性能?

解决方法

使用 quadtree.它们用于消除您知道在碰撞半径之外的大区域,并且它们可以让您快速搜索最近的点.

就实际碰撞检测而言,由于你只使用凸起的物体,请看0700在the separating axis theorem.在他们的旗舰游戏中,他们实际上使用网格来找到所有要检查碰撞的物体,但它不应该’改为使用四叉树太难了.

(我记得在四面体上阅读一篇文章,在网格中使用圆圈来说明如何在半径范围内找到点.但我似乎无法找到它.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读