0

私は、中心から等距離の交互の点である配列された結果を思い付くためのアルゴリズムを理解しようとしています(パーセントベースにすることができます)。したがって、私の最終結果は次のようになります。X = 20(アイテムの数に基づく分離距離)-100/5(5つのアイテムが100%に分散)

  • A = 50(中心点)
  • B = 70(A + 20)
  • C = 30(A-20)
  • D = 90(B + 20)
  • E = 10(C-20)

別の結果は、10個のアイテム(X = 100/10)がある場合です。

  • A = 50(中心点)
  • B = 60(A + 10)
  • C = 40(A-10)
  • D = 70(B + 10)
  • E = 30(C-10)
  • F = 80(D + 10)
  • G = 20(E-10)
  • H = 90(F + 10)
  • I = 10(G-10)
  • J = 100(H + 10)

重要な場合は、PHPを使用してこのアルゴリズムに到達しようとしています。私は数学の専門家ではないので、このタイプの計算の名前があるかどうかはわかりません。ありがとう!

4

2 に答える 2

0

私があなたを正しく理解していれば、これはうまくいくはずです:

function pointsArray($center, $numPoints) {        
        $arr = array();
        $arr[0] = $center;

        for($i = 1;$i < $numPoints; $i++)
            $arr[$i] = $i%2 == 0 ? $center - ($i-1)*20 : $center + $i*20;

        return $arr;
}

それより、次のような関数を使用できます。

$PointsArray = pointsArray(50, 5); // {50,70,30,90,10}
于 2013-03-25T05:55:39.743 に答える
0

次のような関数を書くことができます:

function getArrayEquidistant($startValue, $step, $nbEntries)
{
    $i = 0;
    $count = 1;
    $final = array();
    $final[] = $startValue;
    while($i < $nbEntries)
    {
        if ($i % 2 == 0)
            $final[] = $startValue + ($count * $step);
        else
        {
            $final[] = $startValue + ($count * $step);
            $count++;
        }

        $i++;
    }

    retun $final;
}

ここ$startValueで、は初期値(インデックス0)、$stepは各反復で追加またはサブされる値、および$nbEntries初期値の後のエントリ数です。

例として:

print_r(getArrayEquidistant(50, 20, 10));

あなたに与えるでしょう:

Array
(
    [0] => 50
    [1] => 70
    [2] => 30
    [3] => 90
    [4] => 10
    [5] => 110
    [6] => -10
    [7] => 130
    [8] => -30
    [9] => 150
    [10] => -50
)
于 2013-03-25T05:59:18.777 に答える