如何将0到无穷大的值钳制到0到1的值?

tur*_*oom 2 java math game-development

我有一个Java程序,它可以生成一个从0到无限的浮点值积极性.我需要做的是,浮动越高,程序触发函数attackPawn()的可能性就越高.

我已经发现我需要函数Math.random(),它给出一个介于0和1之间的随机值.如果Math.random()低于侵略性转换为0到1之间的浮点数,我调用函数attackPawn( ).

但是现在我被卡住了,我无法弄清楚如何将侵略性从0变为无限到从0到1的浮点数,1意味着"无限"的侵略性而0意味着没有愤怒.

任何想法或数学等式?先感谢您

pen*_*gon 12

你想要一个将[0 ... infinity]映射到[0..1]的单调函数.有很多选择:

    y=Math.atan(x)/(Math.PI/2);
    y=x/(1+x);
    y=1-Math.exp(-x);
Run Code Online (Sandbox Code Playgroud)

还有更多.在给定正常数的情况下,每个函数都可以任意缩放k>0:

    y=Math.atan(k*x)/(Math.PI/2);
    y=x/(k+x);
    y=1-Math.exp(-k*x);
Run Code Online (Sandbox Code Playgroud)

有无数的选择.只需选择一个适合您需求的产品.