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)
  • 我 = 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 回答