首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >二维网格中对象的碰撞处理

二维网格中对象的碰撞处理
EN

Stack Overflow用户
提问于 2017-02-20 16:16:36
回答 1查看 1.2K关注 0票数 6

我正在Java中开发一个模拟,对象在2D网格中移动。网格中的每个单元只能被一个单元格占用,对象通过从一个单元格移动到另一个单元格移动。

这比特定于Java的理论更有理论意义,但是有没有人想过我应该如何使用这个网格来处理冲突处理呢?在类似网格的世界中,人们是否曾经使用过任何算法来处理碰撞?

请注意,我不是在谈论碰撞检测,因为这是微不足道的,因为对象从一个单元格移动到另一个单元格。我说的是碰撞处理,它会变得非常复杂。

对象A希望移动到与对象B相同的位置,对象C希望移动到对象B的当前位置。由于每个单元只能包含一个对象,如果对象A能够移动到它想要的位置,这将导致对象B保持静止,从而使对象C也保持静止。

可以想象,这可能会产生一个更长的碰撞链,需要处理。

是否有任何算法或方法,人们已经使用,可以帮助这一点?没有碰撞检测算法饱和的搜索结果,几乎不可能搜索到这个问题。

编辑:所有的对象在完全相同的时间移动。我希望限制必须保持静止的对象的数量,因此我倾向于先处理具有较长碰撞链的对象(如本例中的对象B)。

EN

回答 1

Stack Overflow用户

发布于 2017-02-20 17:06:25

检查“提前”/“下一步”将导致计算困难,甚至爆炸。

相反,你可以(并行地)检查“哪个粒子可以移动到这个点?”在每个细胞上。为此,您需要在每个单元格中有一个速度矢量的速度图。然后沿着这个向量向后,你会发现一个细胞。如果有粒子,把它带到细胞里。

这样就不会发生冲突,因为每个单元格只执行一个操作。从负速度矢量的终点得到最近的细胞。

这是有点棘手的计算,因为速度可能不会完全降落在细胞的中心。需要概率(如果它是非常接近角,而不是中心)的运动/宏效果相等也。

因此,只有在细胞指数上才会有竞争条件,而运动的随机性(或根据距离细胞中心的距离来选择粒子)会容忍这种情况。

在量子物理学中,粒子可以跳过墙的另一边,静止不动(即使它不应该),还可以做一些对经典物理学来说不自然的事情。因此,如果分辨率很高,而且速度不高于地图大小,它应该看起来很自然,特别是当多个细胞竞争从另一个细胞中获取一个粒子时,它具有随机性。

多次通行证:

  • 计算哪些细胞需要从哪个细胞中收集,
  • 计算概率,然后获胜
  • 赢钱细胞平行地从源细胞中收集粒子。
  • (不推荐),如果仍然有一个速度未被挑选的粒子,那么做每一个粒子的计算来移动他们(如果他们的目标细胞是空的),应该会进一步减少静止粒子。
  • 在细胞上扩散粒子速度几次(使用2D模板),以便在下一次迭代中使用(这一次处理复杂的碰撞计算很容易,而且以令人尴尬的并行方式进行,有利于多线程-gpgpu)(如果粒子只能到达最近的邻居,这也有助于知道哪一个,即使没有优先级也不可能,因为每个单元都以速度扩散的方式显示相邻的细胞速度)。

检验Gauss(method)方法求解许多线性方程组.

计算是在单元上进行的,而不是粒子上的,因此地图边界将是隐式的、防弹的,并且计算可以在所有核之间平均分布。

示例:

粒子A下降

粒子B向右

他们在碰撞的过程中

速度图平衡态的求解(Gauss)

现在粒子A的细胞有到down+right的速度

与B相同

就好像它们被碰撞了,但它们仍然在它们的细胞上。

用细胞的速度移动它们会使它们看起来像是在碰撞。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42356480

复制
相关文章
替换空格
https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/
代码随想录
2021/07/16
4.7K0
替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
用户3003813
2018/09/06
3.1K0
替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 public class Solution { public String replaceSpace(StringBuffer str) { if(str==null){ return null; } StringBuilder newStr = new St
desperate633
2018/08/27
2.4K0
替换空格
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。       看到这个题目,我们首先应该想到的是原来一个空格字符,替换之后变成'%'、'2'和'0'这3个字符,因此字符串会变长。如果是在原来的字符串上做替换,那么就有可能覆盖修改在该字符串后面的内存。如果是创建新的字符串并在新的字符串上做替换,那么我们可以自己分配足够多的内存。       在这里介绍一种时间复杂度为O(n)的解法。        我们可以先遍历
猿人谷
2018/01/17
2.8K0
替换空格
空格替换
设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。
呼延十
2019/07/01
2.3K0
[剑指offer] 替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
尾尾部落
2018/09/04
1.9K0
[剑指offer][Java]替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
蛮三刀酱
2019/03/26
2.1K0
空格替换
描述 设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。 你的程序还需要返回被替换后的字符串的长度。 注意事项:如果使用 Java 或 Python, 程序中请用字符数组表示字符串。 样例 对于字符串 "Hello World" , 长度为 11 替换空格之后,参数中的字符串需要变为 "Hello%20World",并且把新长度 17 作为结果返回。 思路 循环遍历字符数组 碰到空字符则将空字符后所有的字符向后移动两位
一份执着✘
2018/06/04
2.6K0
替换空格_02
咱也不知道这题是不是有啥奇怪的思路要做?直接就下面这行代码结束了。 public String replaceSpace (String s) { if (s==null||s.length()==0){ return ""; }else { return s.replaceAll(" ","%20"); } }
名字是乱打的
2021/12/23
1.7K0
替换空格_02
LintCode 空格替换
设计一种方法,将一个字符串中的所有空格替换成 %20。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。 你的程序还需要返回被替换后的字符串的长度。
desperate633
2018/08/22
7660
[剑指]2空格替换
1,题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20 Happy。 2,解题思路 这里我们直接用字符串遍历的方法,将每一个字符遍历出来进行判断; 若等于空格,则替换成%20,不等于空格,则加上其本身即可; 最后再转换成字符串对象; 3,程序代码 public static String replaceSpace(StringBuffer str) { StringBuffer sb=n
程序员的时光001
2020/07/22
8950
004-替换空格
替换空格 请实现一个函数,将一个字符串中的每个空格替换成"%20"。 We Are Happy 输出 We%20Are%20Happy分析 遍历字符串 Python class Solution: def replaceSpace(self, s): # s 源字符串 s = list(s) count=len(s) for i in range(0,count): if s[i]==' ':
单车变摩托
2019/04/04
7260
牛客网 替换空格
一个空格最后替换成'%''2''0',一个字符替换为三个字符,相当于增加了2个字符;
怠惰的未禾
2023/04/27
1.5K0
从后往前替换空格
① 在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。因为一个空格要替换成三个字符(%20),所以当遍历到一个空格时,需要在尾部填充两个任意字符。
MickyInvQ
2021/10/26
1K0
【剑指offer】替换空格
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
7410
【剑指Offer】替换空格
但是,显然这种已经有的方法不是面试官想要得到的答案,所以你得另寻方法,自己写个方法,如果写不出,那肯定给面试官不能留下一个好的印象。
Rochester
2020/09/10
6260
字符串:替换空格
示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy."
代码随想录
2020/09/10
4.6K0
字符串:替换空格
Sword To Offer 002 - 替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
Reck Zhang
2021/08/11
5750
牛客网-替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
手撕代码八百里
2020/07/28
8570
word文档尾部空格没有下划线
问题出在兼容性上面了,office版本太多了!解决方法如下: 1.word2003——工具-〉选项-〉兼容性-〉找到“为尾部空格添加下划线”的选项打勾即可 2.word2007——点击左上角的“MS Office按钮”——word选项——高级——兼容性选项——版式选项——为尾部空格添加下划线 3.word2016——文件——选项——高级——兼容性选项——microsoft office 2013-2016——确定 修改后效果:
P轴
2022/11/18
9400

相似问题

用下划线替换空格

132

用下划线替换空格

50

${file%/*}用下划线替换空格

18

内容替换功能:用下划线替换空格

13

JQuery -用空格替换下划线

45
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文