以下函数接受dpi值并返回百分比:
100% if the value is bigger than 200
50% to 100% if the value is between 100 and 200
25% to 50% if the value is between 80 and 100
0% to 25% if the value is lower than 80
static public function interpretDPI($x) {
if ($x >= 200) return 100;
if ($x >= 100 && $x < 200) return 50 + 50 * (($x - 100) / 100);
if ($x >= 80 && $x < 100) return 25 + 25 * (($x - 80) / 20);
if ($x < 80) return 25 * ($x / 80);
}
现在我必须根据这些规则更改此函数,返回:
100% if the value is bigger than 100
75% to 100% if the value is between 72 and 100
50% to 75% if the value is between 50 and 72
0% to 50% if the value is lower than 50
为了实现这一点,我试图根据我对函数行为的理解重新建模:
static public function interpretDPI($x) {
if ($x >= 100) return 100;
if ($x >= 72 && $x < 100) return 75 + 75 * (($x - 72) / 28);
if ($x >= 50 && $x < 72) return 50 + 50 * (($x - 50) / 22);
if ($x < 50) return 25 * ($x / 50);
}
但结果显然是错误的。例如,96%的dpi将给我141%的结果。显然这是错误的,但我缺乏数学理解,不知道为什么-以及如何解决它。
我一定是误解了这个函数的工作原理。
有人能详细说明一下吗?
最佳答案
这是正确的想法,但是公式中的系数数字是错误的,这会得到141%的结果。
你应该试试这个:
static public function interpretDPI($x) {
if ($x > 100) return 100;
if ($x > 72 && $x <= 100) return 75 + 25 * (($x - 72) / 28);
if ($x >= 50 && $x <= 72) return 50 + 25 * (($x - 50) / 22);
if ($x < 50) return 50 * ($x / 50);
}
我想你会得到你想要的结果,我查过了,看起来不错:)