Php 从中心开始的交替算法
我正试图找出一个算法,得到一个阵列结果,它是距离中心等距离的交替点(可以是基于百分比的)。所以,我的最终结果是: X=20(基于#个项目的间隔距离)-100/5(5个项目分布在100%以上)Php 从中心开始的交替算法,php,algorithm,Php,Algorithm,我正试图找出一个算法,得到一个阵列结果,它是距离中心等距离的交替点(可以是基于百分比的)。所以,我的最终结果是: 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=2
- A=50(中心点)
- B=70(A+20)
- C=30(A-20)
- D=90(B+20)
- E=10(C-20)
- 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实现这个算法。我不是一个数学天才,所以我不确定这种类型的计算是否有名字。谢谢 如果我理解正确,这应该可以:
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;
}
您可以编写如下函数:
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;
}
将为您提供:
Array
(
[0] => 50
[1] => 70
[2] => 30
[3] => 90
[4] => 10
[5] => 110
[6] => -10
[7] => 130
[8] => -30
[9] => 150
[10] => -50
)
这基本上就是我现在的工作。我不确定是否有什么神奇的数学方法可以做到这一点。尽管如此,我使用了2个计数$left和$right,以及使用%2替换每个步骤的总计都不会写入它,但您也可以使用不同的方法处理步长值,并在每次迭代时将其乘以-1。(以便依次添加+步骤和-步骤)。
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
)