中间一点的点数组

时间:2013-09-15 12:23:01

标签: php

我得到了一系列要点:

array(
    array('x' => ...,'y' => ...), 
    array('x' => ...,'y' => ...) 
    ...
    )

将这些积分放在一个最佳方式是什么,即处于“avarge”位置?配对然后配对然后配对......一个好的算法?

我会为这个问题给自己-1,因为它似乎很容易,但我现在正在研究项目超过20个小时,我的大脑就消失了。

嗯......就像计算avarge x和avarge y一样简单吗?

3 个答案:

答案 0 :(得分:1)

最好的解决方案是关闭电脑并进入睡眠状态几个小时。然后唤醒休息并准备好进行新的编程会话。这个解决方案基于这样一个假设:你已经为这个项目分配了20个小时没有任何适当的休息时间。

虽然这不是您问题的直接答案,但它肯定会帮助您自己实现目标。不要低估小睡的力量。

答案 1 :(得分:1)

看一下我写的这个函数,循环遍历多维数组的所有元素,并在将所有元素添加到一起后返回它们的平均值。

print_r(getAveragePoints(array(array('x' => 1,'y' => 3),array('x' => 2,'y' => 4))));

function getAveragePoints($arrays = array()) {
   if(!empty($arrays)) {
      $i=0;
      $x = 0;
      $y = 0;
      foreach($arrays as $array) {
        // this would take avg 
        $x += $array['x']; // x
        $y += $array['y'];   // y
        $i++;
      }
      $avgX = $x / $i; 
      $avgY = $y / $i;

      return array($avgX,$avgY);
   } else {
      return array(0,0);
   }
}

答案 2 :(得分:1)

简单平均选项:

$pointArray = array(
    array('x' => 1,'y' => 2), 
    array('x' => 2,'y' => 5),
    array('x' => 3,'y' => 3) ,
    array('x' => 4,'y' => 6) ,
    array('x' => 4,'y' => 5) ,
);

$valueCount = count($pointArray);
$midpoint = array_map(
    function($value) use($valueCount) {
        return $value / $valueCount;
    },
    array_reduce(
        $pointArray,
        function($summary, $value) {
            return array(
                'x' => $summary['x'] += $value['x'],
                'y' => $summary['y'] += $value['y']
            );
        },
        array('x' => 0, 'y' => 0)
    )
);

var_dump($midpoint);