小编Jim*_*inP的帖子

物理引擎如何实际模拟物理?

这个问题可能是一个愚蠢的问题,但我真的很好奇.

在玩过像HL2,GMod或者愤怒的小鸟这样的游戏,并使用像Box2D这样的物理库之后,我开始怀疑"物理引擎如何模拟物理?"

像词法和语法分析器用于编译时理解代码,并使用光线跟踪渲染3D场景,我认为有一些概念(比碰撞检测等),它们在物理引擎来模拟物理,如计算力矩和五边形进行桶滚动的速度.

物理引擎如何实际模拟物理?使用了什么概念?网上是否有关于制作像这样的物理引擎的"教程" ,它展示了光线追踪?

physics-engine

18
推荐指数
2
解决办法
7330
查看次数

如何实现(快速)bigint部门?

我正在创建自己的BigInt类,通过将数字分成7位数.(即基数10,000,000)

我实现了加法,减法和乘法,现在我正在实现除法和mod.我编写了一个代码,通过长除法进行除法(通过除以最高有效数字来估算数字),并且它有效.

但是,它太慢了.当我测试108位数和67位数的运算时,计算除法需要1.9ms,比其他运算慢得多(计算加法/减法0.007~0.008ms,计算乘法0.1ms).

与用于快速乘法的Karatsuba和FFT算法一样,存在用于计算除法的算法?维基百科演示了一些除法算法(计算除数的乘法逆,并将其乘以除数),但我认为这对我实施除法没有多大帮助.我也阅读了"大整数方法"部分,但这对我也没有帮助...... :(

javascript algorithm biginteger integer-division

18
推荐指数
1
解决办法
4670
查看次数

为什么Firefox和其他浏览器在计算哪个数字更大时表现相反?

两天前,当我发现jsperf.com收集了许多javascript性能测试时,我浏览了几个测试.

其中一个测试是这样,与之相比,Math.min(a,b)VS a<b?a:b.当我在谷歌浏览器上运行此测试时,结果证明它a<b?a:bMath.min(a,b)(在Chrome 14上,第一个53,661,381 ops/s和第二个419,830,711 ops/s)快得多.其他Web浏览器也有类似的结果.

但是,在Firefox上,结果是相反的.Math.min(a,b)要快得多a<b?a:b!第一个是374,219,869 ops/s第二个,第二个是79,490,749 ops/s在Firefox 6上.

在此输入图像描述

当我在Facebook上发布此消息时,有人说"由于Firefox是开源项目,开发人员进行了优化Math.min,但谷歌Chrome没有,因为谷歌Chrome只是Chromium的修改",但(除了以上声明并不完全正确)这没有任何意义,因为这并不能解释为什么谷歌Chrome a<b?a:b和Firefox Math.min(a,b)以相似的速度运行,而谷歌Chrome Math.min(a,b)和Firefox的a<b?a:b速度相同,因为如果Firefox比谷歌Chrome更快,那么谷歌Chrome Math.min(a,b)应该比Firefox的a<b?a:b.

摘要:

  1. 在其他浏览器上,a<b?a:b速度比Math.min(a,b).
  2. 但是,在Firefox上,Math.min(a,b)速度要快于a<b?a:b.
  3. 由于Math.min(a,b)Firefox上的速度≒ a<b?a:b谷歌Chrome的速度和a<b?a:bFirefox上的速度≒ Math.min(a,b)谷歌Chrome 的速度,"Firefox很慢"或"Firefox很快"不能成为原因.

有没有理由(如何)这种情况发生?

javascript performance firefox google-chrome

9
推荐指数
1
解决办法
465
查看次数

如何使用numpy将RGB图像转换为基于颜色的one-hot编码3d数组?

简而言之,我想做的与这个问题类似:Convert RGB image to index image,但我想要获取 n 通道图像,而不是 1 通道索引图像,其中img[h, w]是 one-hot 编码向量。例如,如果输入图像为[[[0, 0, 0], [255, 255, 255]],索引 0 分配给黑色,索引 1 分配给白色,则所需的输出为[[[1, 0], [0, 1]]]

就像上一个人问的问题一样,我天真地实现了这个,但是代码运行得很慢,我相信使用 numpy 的正确解决方案会明显更快。

另外,正如上一篇文章中所建议的,我可以将每个图像预处理为灰度并对图像进行单热编码,但我想要一个更通用的解决方案。

例子

假设我想将白色分配给 0,红色分配给 1,蓝色分配给 2,黄色分配给 3:

(255, 255, 255): 0
(255, 0, 0): 1
(0, 0, 255): 2
(255, 255, 0): 3
Run Code Online (Sandbox Code Playgroud)

,我有一个由这四种颜色组成的图像,其中图像是一个 3D 数组,其中包含每个像素的 R、G、B 值:

[
    [[255, 255, 255], [255, 255, 255], [255,   0,   0], [255,   0,   0]],
    [[  0,   0, …
Run Code Online (Sandbox Code Playgroud)

python numpy image

5
推荐指数
1
解决办法
6907
查看次数

如何在BrainFuck中以任意数量移动指针?

例如,如果数组是这样的0 0 0 0 ... 0 0[n]s o m e d a t a 4 9 9 9 9 9 9 8 3 7 ...,如何将指针移动n,而不是s o m e d a t a 4 9 9 9 ...在指针移动后改变?

brainfuck

2
推荐指数
1
解决办法
985
查看次数

如何更快地解决Euler Project Prblem 303?

问题是:

对于正整数n,将f(n)定义为n的最小正数,用基数10表示,仅使用数字≤2.

因此f(2)= 2,f(3)= 12,f(7)= 21,f(42)= 210,f(89)= 1121222.


为了在Mathematica中解决它,我编写了一个f计算f(n)/ n的函数:

f[n_] := Module[{i}, i = 1; 
While[Mod[FromDigits[IntegerDigits[i, 3]], n] != 0, i = i + 1]; 
Return[FromDigits[IntegerDigits[i, 3]]/n]]
Run Code Online (Sandbox Code Playgroud)

原理很简单:0, 1, 2使用三元数字系统枚举所有数字,直到其中一个数除以n.

它正确地给出11363107了1~100,并且我测试了1~1000(计算花了大约一分钟,然后给出111427232491),所以我开始计算问题的答案.

但是,这种方法太慢了.计算机已经计算了两个小时的答案并且还没有完成计算.

如何改进我的代码以更快地计算?

optimization wolfram-mathematica

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

为什么会发生此错误? - "以下替代品永远无法匹配"

我对编译器,解析器和解析器生成器感兴趣,但我对它们知之甚少.

在阅读了这个问题的答案之后,我尝试制作一个"非常"简单的LaTeX解析器.

这是代码:

grammar Latex;

latex   :   ITEM*;
ITEM    :   CMD|LAWTEXT;
CMD :   CHEAD ARGS;
CHEAD   :   '\\' LETTER(LETTER|DIGIT)*;
LETTER  :   'A'..'Z'|'a'..'z';
DIGIT   :   '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9';
ARGS    :   '{' ITEM* '}';
LAWTEXT :   (LETTER|DIGIT|WHITESPACE|PUNC)*;
WHITESPACE
    :   ' '|'\t'|'\n'|'\r';
PUNC    :   '!'|'^';
Run Code Online (Sandbox Code Playgroud)

(PUNC中只有两个字符用于测试目的)

这是错误消息:

[18:39:09] warning(200): C:\Users\***\Documents\Latex.g:9:12: Decision can match input such as "{'\t'..'\n', '\r', ' '..'!', '0'..'9', 'A'..'Z', '\\', '^', 'a'..'z', '}'}" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input
[18:39:09] error(201): …
Run Code Online (Sandbox Code Playgroud)

parsing antlr antlrworks

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