小编use*_*528的帖子

多个物体之间的碰撞

为了好玩,我正在编写一个简单的物理系统,但遇到了一个让我陷入困境的问题。

现在的基本算法是:

  1. 移动对象
  2. 检查碰撞
  3. 如果发生碰撞
    • 将对象移动最小距离以解决碰撞。
    • 根据法线、质量等调整速度

我有一个移动的物体向两个静止的、无质量的物体移动。

图一

移动物体一步平移,与其中一个物体发生碰撞。

图二

我的回应是找到我可以移动的最小距离,以便它们不再发生碰撞。在这种情况下,这意味着将动态物体直接向下移动。但是,现在它正在与另一个盒子发生碰撞。

图三

我对那个盒子重复同样的事情,试图移动动态盒子,使其不再发生碰撞,但这会将它推回到第一个盒子中。这将永远重复。我的算法从根本上有缺陷吗?

algorithm physics collision

5
推荐指数
2
解决办法
3271
查看次数

两个对象相互引用,带有最终引用

我有一个看起来像这样的类:

public class Node {
    private final Node otherNode;
    public Node(Node otherNode) {
        this.otherNode = otherNode;
    }
}
Run Code Online (Sandbox Code Playgroud)

并希望做类似的事情

Node n1, n2 ;
n1 = new Node(n2);
n2 = new Node(n1);
Run Code Online (Sandbox Code Playgroud)

但显然不能,因为n2尚未初始化.我不想使用setter来设置otherNode,因为它是最终的,因此只能设置一次.实现这一目标的最简洁方法是什么?是否有一些我不熟悉的Java语法让我这样做?我应该使用除了构造函数之外的初始化方法(丑陋),还是只使用一个setter(也很难看)?

java constructor final

3
推荐指数
1
解决办法
156
查看次数

使用Python中的正则表达式对列表进行排序

我有一个电子邮件地址列表,格式如下:

name###@email.com

但这个数字并不总是存在.例如:john45 @ email.com,bob @email.com joe2@email.com等.我想用数字对这些名字进行排序,没有数字的那些名字先排序.我想出了一些有用的东西,但对Python来说是新手,我很好奇是否有更好的方法.这是我的解决方案:

import re

def sortKey(name):
    m = re.search(r'(\d+)@', name)
    return int(m.expand(r'\1')) if m is not None else 0

names = [ ... a list of emails ... ]
for name in sorted(names, key = sortKey):
    print name
Run Code Online (Sandbox Code Playgroud)

这是我的脚本中唯一一次使用"sortKey",所以我更喜欢它是一个lambda函数,但我不知道该怎么做.我知道这会奏效:

for name in sorted(names, key = lambda n: int(re.search(r'(\d+)@', n).expand(r'\1')) if re.search(r'(\d+)@', n) is not None else 0):
    print name
Run Code Online (Sandbox Code Playgroud)

但我认为我不应该两次调用re.search来做到这一点.在Python中执行此操作的最优雅方式是什么?

python lambda

3
推荐指数
1
解决办法
1583
查看次数

标签 统计

algorithm ×1

collision ×1

constructor ×1

final ×1

java ×1

lambda ×1

physics ×1

python ×1