1

次の関数は、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);
    }

しかし、結果は明らかに間違っています。たとえば、DPI が 96 の場合、結果として 141% になります。明らかにこれは間違っていますが、その理由と修正方法を知るための数学的理解が不足しています。

関数の仕組みについて何か誤解していたに違いありません。

誰でもこれについて詳しく説明できますか?

4

2 に答える 2

0

それは正しい考えですが、式の係数の数値が間違っているため、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);
  }

私はあなたが望む結果を得ると思います、私はそれをチェックしました、それはよさそうです:)

于 2013-05-15T09:39:11.100 に答える