以下のような座標を持った点からソートや並び替えなどをうまく行い、四隅の座標を求める方法を考えていました。
array( array( "x" => 100, "y" => 0, ), array( "x" => 105, "y" => 50, ), array( "x" => 200, "y" => 45, ), array( "x" => 205, "y" => 5, ), )
最初の案では、X軸をもとにソートを行い、左にあるグループ、右にあるグループに分け、その中で、Y軸のソートを行うことで、四隅を求めようとしていたのですが、 与えられる座標が4点以上になったときに対応が難しいということもあり、多少の誤差はあるのですが、xのmax,min、yのmax,minを求めることにより、四隅を求めることにしました。
private function coordinateSort($coordinateArray){ // x座標でのソート for($i = 0; $i < count($coordinateArray); $i++) { // 要素数-1回繰り返し for($n = 1; $n < count($coordinateArray); $n++) { // 隣接要素を比較し大小が逆なら入替える if($coordinateArray[$n-1]["x"] > $coordinateArray[$n]["x"]) { $temp = $coordinateArray[$n]; $coordinateArray[$n] = $coordinateArray[$n-1]; $coordinateArray[$n-1] = $temp; } } } $min_x = $coordinateArray[0]["x"]; $max_x = $coordinateArray[count($coordinateArray)-1]["x"]; //y座標でのソート for($i = 0; $i < count($coordinateArray); $i++) { // 要素数-1回繰り返し for($n = 1; $n < count($coordinateArray); $n++) { // 隣接要素を比較し大小が逆なら入替える if($coordinateArray[$n-1]["y"] > $coordinateArray[$n]["y"]) { $temp = $coordinateArray[$n]; $coordinateArray[$n] = $coordinateArray[$n-1]; $coordinateArray[$n-1] = $temp; } } } $min_y = $coordinateArray[0]["y"]; $max_y = $coordinateArray[count($coordinateArray)-1]["y"]; $sort_coordinate_array = array( "top_left" => array( "x" => $min_x, "y" => $min_y, ), "top_right" => array( "x" => $max_x, "y" => $min_y, ), "buttom_right" => array( "x" => $max_x, "y" => $max_y, ), "buttom_left" => array( "x" => $min_x, "y" => $max_y, ) ); return $sort_coordinate_array; }