我是一名前端和后端开发人员,在处理简单的游戏开发和动画时,我曾遇到过几次这样的挑战。我希望我有一个功能来解决这个问题,所以我希望你们数学家/ gals可以帮助我使用伪代码,然后我可以发布一个我们可以通过浏览器运行的功能来测试它。
对我来说解释这个挑战有点困难,所以请原谅我,我会像一个谜语一样把它给出来:
您试图以百分比的形式找到您的考试成绩。您知道,对于正常百分比,表示为
0.00 - 1.00
的小数,您可以执行actual_test_score / max_test_score
之类的操作。但是,你并不是在寻找任何旧的百分比。您希望将百分比表示为十进制数的指定范围内的十进制。例如,您希望(给定
actual_test_score
和max_test_score
)将您的考试成绩作为0.50 - 1.00
的百分比。如何计算
actual_test_score / max_test_score
表示为0.50 - 1.00
范围之间的百分比,而不是0.00 - 1.00
的典型范围。
花了一段时间来解释这个问题(这可能不是最好的解释),因为它不是我经常要解释的东西,但它又是我现在遇到的东西,然后
答案 0 :(得分:2)
这是从[0,1]到[newMin,newMax]的线性范围映射,这是从[oldMin,oldMax]到[newMin,newMax]的一般线性范围映射的特定情况:
function linearRemap(value, oldMin, oldMax, newMin, newMax) {
var newScale = newMax - newMin;
var valueAsPct = (val - oldMin) / (oldMax - oldMin);
var scaledValue = valueAsPct * newScale;
var shiftedAndScaledValue = scaledValue + newMin;
return shiftedAndScaledValue;
}
因此,此处的有限案例允许您跳过百分比计算行:
function linearRemapPct(valueAsPct, newMin, newMax) {
var newScale = newMax - newMin;
var scaledValue = valueAsPct * newScale;
var shiftedAndScaledValue = scaledValue + newMin;
return shiftedAndScaledValue;
}
或者只是
function linearRemapPct(valueAsPct, newMin, newMax) {
return (valueAsPct * (newMax - newMin) + newMin);
}
如果你想要一些关于精度损失更加小心的东西:
function linearRemapPct(valueAsPct, newMin, newMax) {
return (valueAsPct * newMax) + (1 - valueAsPct) * newMin;
}
答案 1 :(得分:0)
如果我正确阅读此内容,您是否希望将0
表示为0.5
?
在这种情况下,您需要将您的数字乘以得分范围; highest_score - lowest_score
,在您的情况下似乎是1 - 0.5
。
然后将lowest_score
添加到您的结果中。
这是一个粗略函数形式的例子;
function relative_percentage (score, max_score, min_score) {
// score should be a value from 0 to 1.
return score * (max_score - min_score) + min_score;
}