2013-03-25 21 views
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該算法到達。我不是一個數學知識,所以我不確定這種計算是否有名稱。謝謝!

回答

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是增值ed或sub在每次迭代中,以及$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 
) 
+0

這基本上就是我現在的工作。我不確定是否有一些神奇的數學方法來做到這一點。 – solepixel 2013-03-25 06:05:50

+0

雖然,我正在使用2次計數。 $ left和$ right,並使用%2來替換每個 – solepixel 2013-03-25 06:07:58

+0

的總計我不寫它,但是您也可以對step值使用不同的方法,並在每次迭代時將其乘以-1。 (爲了連續添加+步驟和步驟)。 – MatRt 2013-03-25 06:09:19

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}