我有一个 Java 程序,它生成一个从 0 到无穷大的浮点值攻击性。我需要做的是,这个 float 值越高,程序触发函数 attackPawn() 的机会就越大。
我已经发现我需要函数 Math.random(),它给出 0 到 1 之间的随机值。如果 Math.random() 低于攻击性,则转换为介于 0 和 1 之间的 float 0 和 1,我调用函数 attackPawn()。
但现在我陷入困境,我不知道如何将攻击性从0到无限转换为从0到1的 float ,1表示“无限”攻击性,0表示没有愤怒。
有什么想法或数学方程式吗?
最佳答案
您需要一个将 [0...无穷大] 映射到 [0..1] 的单调函数。有很多选择:
y=Math.atan(x)/(Math.PI/2);
y=x/(1+x);
y=1-Math.exp(-x);
还有更多。给定一个正常数k>0
,这些函数中的每一个都可以任意缩放:
y=Math.atan(k*x)/(Math.PI/2);
y=x/(k+x);
y=1-Math.exp(-k*x);
有无数种选择。只需选择一个适合您需求的即可。
关于java - 如何将 0 到无穷大的值限制为 0 到 1 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23105684/