PHP で使う機会は余りありませんが、たまたま多角形の重心点を計算する必要があったので、下記サイトを参考にして PHP で書き換えてみました。
参考
http://homepage2.nifty.com/gis_yasu21/sub1.htm(リンク切れ)
<?php // 頂点を右回りに記述 (x, y) $vertexes = array( array(0, 0), array(10, 80), array(100, 100), array(120, 30) ); $n = count($vertexes); $area = 0; $gx = 0; $gy = 0; for($i=0;$i<$n;$i++){ $pt1 = $vertexes[$i]; $pt2 = ($i + 1 >= $n) ? $vertexes[0] : $vertexes[$i + 1]; $area = $area + ($pt2[0] - $pt1[0]) * ($pt2[1] + $pt1[1]); $gx = $gx + ((pow($pt2[0], 3) - pow($pt1[0], 3)) * ($pt2[1] - $pt1[1]) / 3 + (pow($pt2[0], 2) - pow($pt1[0], 2)) * ($pt2[0] * $pt1[1] - $pt1[0] * $pt2[1]) / 2) / ($pt2[0] - $pt1[0]); $gy = $gy + ((pow($pt2[1], 3) - pow($pt1[1], 3)) * ($pt2[0] - $pt1[0]) / 3 + (pow($pt2[1], 2) - pow($pt1[1], 2)) * ($pt1[0] * $pt2[1] - $pt2[0] * $pt1[1]) / 2) / ($pt2[1] - $pt1[1]); } $area = abs($area * 0.5); // 面積 $gx = $gx / $area; // 重心x座標 $gy = -$gy / $area; // 重心のy座標
Similar Posts:
- [PHP]マジックメソッドを使ったアクセサ(__get, __set)
- [PHP]ページごとの訪問者数を調べるアクセスカウンター
- [PHP]ライフゲームを作る
- [PHP]文字の種類ごとに最低1つ以上使ったランダム文字列
- [PHP]レーダーチャート(クモの巣グラフ)をGDで描画する
- [HTML, CSS]CSSのクラスやIDの命名規則とよく使われる名前
- [PHP]画像を連結して数値を表示する
- [PHP]10進数を任意の文字を使って62進数などのn進数に相互変換する(基数変換)