我有一个介于0到8000之间的值,我希望将这个数字解析为0到2000之间的另一个数字。我可以把它除以4,但我在这里有一个特别的需要。
对于4000以上的值,我希望映射的值偏向2000年。但是对于低于4000的值,我希望映射的值偏向于0。
这实际上是一个游戏,你可以在0到2000之间得到加分,这取决于你完成任务的速度。所以,如果你非常快,并在7500毫秒内完成它,你应该得到1875点(准确地说是7500 / 4)。如果你在6000毫秒内完成,你将得到1450分(略低于6000 / 4)。如果您速度慢,并在1000毫秒内完成,您将得到50毫秒(低于1000 / 4)。这个想法是奖励速度快的球员比慢的球员更多,但仍然让慢速的球员觉得他们已经取得了一些成就。我觉得一个“放松”的价值映射将实现这一点。
我希望这是合理的。你能帮我找出实现这个目标的代码吗?
发布于 2014-01-26 00:21:33
试试乙状体函数:
它将把值从-(range/2) to +(range/2)
映射到0.0到1.0之间的比例,中点为0 *)。好的是,改变range
会产生不同的曲线。下面是一个使用sigmoid映射1-2000值的示例:
下面是使用范围(R)不同值的函数的两分:
ms r=6 r=20
0 94 0
500 135 0
1000 190 1
1500 265 3
2000 364 13
2500 490 45
3000 641 151
3500 814 445
4000 1000 1000
4500 1186 1555
5000 1359 1849
5500 1510 1955
6000 1636 1987
6500 1735 1997
7000 1810 1999
7500 1865 2000
8000 1906 2000
*)实际上,它在-infinity之间映射到+无穷大,但就您的目的而言,选择一个从-10/+10到-30/+30之间的范围应该可以。
https://softwareengineering.stackexchange.com/questions/225487
复制相似问题