展开讨论

经验与复盘经验摘录 · 机器翻译

几年前我遇到了这个项目[0],即使算法可以编写……

… 几年前我遇到了这个项目[0],即使算法可以用88行C++编写,我还是感到不知所措。我意识到,在所有计算机科学主题中,物理模拟可能是我了解最少的(不是说我是编译器/数据库专家之类的,但至少我实现过一个玩具编译器和一些数据库中使用的基本数据结构。说到物理模拟,我的大脑就一片空白。)[0]: https://github.com/yuanming-hu/taichi_mpm

源讨论超薄信用卡运行流体模拟原帖 221 条评论 · 导入时统计
8

社区评论 0

还没有社区评论,来聊聊你的看法。

原讨论中的回复 8

仅展示本次导入中包含的直接回复。中文为机器翻译,可查看英文原文。

MA

刚体模拟要简单得多。有一门2001年的SIGGRAPH课程[0],内容有些密集,但会让你全面了解刚体模拟,并理解其背后的数学原理。 [0] https://graphics.pixar.com/pbm2001/pdf/notesg.pdf

完整原文
CT

帮助我的一件事是做一些关于pico-8的教程,这是一个有意设计得“弱”的游戏平台,其中一个教程是一个平台游戏,具有简单易懂的惯性/重力模拟(跳跃、左右移动;想想马里奥)。它足够容易理解,角色有x/y位置,以及表示当前速度的dx/dy。每一帧,dx/dy会根据玩家输入和/或角色状态进行改变。 例如:如果玩家按下跳跃按钮,将状态设为“跳跃”,并将dy设为1。每一帧,dy = dy * 0.9。当dy <= 0时,将状态设为“下落”。每一帧,dy = dy * 1.1,直到dy = 1(终端速度)。然后添加一些碰撞检测。 我认为这些基础也是更简单物理模拟的原理,像“下落的沙子”这类应用非常适合这种做法。

完整原文
MA

对于统计力学,我真的很喜欢[1]。它附带了大量Python程序。 要看看什么可能引起你的兴趣,[2]中的视频可能是个不错的起点。 [1]: https://www.coursera.org/learn/statistical-mechanics [2]: https://matthias-research.github.io/pages/tenMinutePhysics/i...

完整原文
ET

Daniel Shiffman 所著的《The Nature of Code》是一本极好的入门书——它用 Processing/p5.js 的清晰示例教授物理模拟的基础知识。

完整原文
ST

直接去 Perplexity 或者类似的地方就可以了,这已经是一片被广泛探索的领域。本质上,你所做的就是对相关的微分方程进行离散化,并让它在一个二维或三维的细胞自动机中运行。 我可以给你一个简单的例子。对于两点之间的热扩散,变化率(一阶导数)与它们的温度差成正比。因此,你为网格上的点制定一个更新规则,即“计算一个单元格温度与其邻居温度的平均差,乘以某个常数,这就是该单元格在该时间的更新量。并行地对每个单元格重复这个过程多次。”然后你加上一个可视化,就可以看到热扩散的过程。一个有趣的例子是原始地球的冷却。你可以看到地壳的形成。 热扩散是一个很好的入门问题。同样适用的还有重力相互作用。

完整原文
II

你可能真正需要的是“数值方法”和“计算物理”。 “物理模拟”是一个非常广泛的范畴,因此你用来模拟流体的代码和你用来模拟行星轨道的代码会非常不同,有时可能会感觉有点随意。但物理定律的基础是微分方程和线性代数。 所以,无论你使用哪种算法来对多个相互关联的变量进行数值积分,它都将广泛适用于模拟任何物理现象。在最简单的层面,你只是通过蛮力来近似积分。例如,每一步都通过速度 += 加速度,位置 += 速度来更新你的物理状态变量。这被称为欧拉方法,虽然简单,但在大多数情况下会迅速积累不可接受的误差。更高级的方法是使用一种方法,如...…

完整原文
DA

基本上所有的物理模拟要么是基于粒子的,要么是基于微分方程的积分(尽管在计算机中,这两种方法都涉及离散化,使它们在计算上有些相似)。你可以阅读《Numerical Recipes》,这本是物理学家的圣经,但它的目标读者是计算机科学基础较弱的科学受众。像《Computer Simulation of Liquids》这样的书可能是一个不错的起点。要明确的是,我在这里讨论的方法更注重物理的准确性:如果你是游戏设计师,你的流体模拟是否物理准确并不重要,重要的是它对玩家看起来是真实的,而有很多更启发式的技巧可以实现这一点。

完整原文
PO

对于水的模拟,可以学习计算着色器。 欧拉方法(基于网格的模拟)是经典示例之一。

完整原文
在 Hacker News 阅读

尊重不同观点,分享具体经验。

登录后即可发帖、评论、转发和引用。