java - 如何将 0 到无穷大的值限制为 0 到 1 的值?

标签 java math game-development

我有一个 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/

相关文章:

java - 如何访问 INRIA-SPOON 中的 "this"变量

c++ - 如何为 cocos2dx 窗口设置标题和全屏标志

game-engine - get_tree().reload_current_scene() 之后 gdscript 全局变量值没有改变

haskell - 如何在纯 Haskell 中编写一个简单的实时游戏循环?

java - 如何将curl代码转换成java

java - 如何在 groupingBy 操作中使用自定义收集器

java - 冒泡排序比较计数始终相同

javascript - 获取2点之间的所有像素坐标

c# - 整数和的算法

math - float 学有问题吗?