【发布时间】:2015-05-20 11:50:33
【问题描述】:
如何在画布中获得随机的 -1 或 1(不在 -1 或 1 之间,只是 -1 或 1,只有这 2 个值)?
我知道我可以使用随机数:
Math.random()
但我只想要随机的 1 或 -1。
【问题讨论】:
标签: javascript canvas random
如何在画布中获得随机的 -1 或 1(不在 -1 或 1 之间,只是 -1 或 1,只有这 2 个值)?
我知道我可以使用随机数:
Math.random()
但我只想要随机的 1 或 -1。
【问题讨论】:
标签: javascript canvas random
var plusOrMinus = Math.random() < 0.5 ? -1 : 1;
【讨论】:
你可以这样做:
var n = (Math.random()>=0.50)?1:-1;
【讨论】:
万一有人不明白 ternar 运算符是如何工作的,我换个方式写同样的:
var value;
if(Math.random() > 0.5) value = 1;
else value = -1;
ups,固定昏迷。谢谢。
【讨论】:
0,5 -> 0.5
不使用分支的解决方案:
((Math.random()+0.5)<<1)-1
此解决方案使用将 [0, 1] 区间匹配到 {-1, 1} 集合的公式。
在这里,我使用floor 这样做。
让我们看看如何:
如果我将 0.5 添加到 Math.random() 我现在在 [0.5, 1.5]。
铺地板后,结果在 {0, 1} 集中。
现在你乘以两个 => { 0, 2} 集合。
现在删除 1 => {-1, 1} 集。
所以公式是这样的:
2*Math.floor(Math.random()+0.5)-1
使用移位运算符更快(但更神秘:-)):
((Math.random()+0.5)<<1)-1
不幸的是...正如您在此处看到的(查看控制台),分支速度更快。
【讨论】: