2013-03-25 19 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}