多角形、たとえば四角形^^; (x1, y1) ... (x4, y4) の中心を求める。正確には、多角形の重心の座標を求める。
データとしては 4つの座標データがセミコロン(;)で区切られている、
$data = '242.18,525.87;243.16,581.93;294.83,580.61;294.00,525.50;';
みたいな初期データを考える(それぞれの x1, y1 の座標はさらにカンマで区切られている)。
で、
多角形の中心点の座標の求め方 (
https://okwave.jp/qa2534558.html) で議論されている内容を PHP 化すると、以下のようになると思う(本当にいいのだろうか?)。
<?php
$data = '242.18,525.87;243.16,581.93;294.83,580.61;294.00,525.50;';
$set = explode(';', $data);
$x = array();
$y = array();
$S = 0;
$X = 0;
$Y = 0;
$count = count($set) - 1;
$set[$count] = $set[0];
print_r($set);
for($i = 0; $i <= $count; $i++) {
list($x[$i], $y[$i]) = explode(',', $set[$i]);
}
for($i = 0; $i < $count; $i++) {
$S += $x[$i] * $y[$i+1] - $x[$i+1] * $y[$i];
}
$S /= 2;
for($i = 0; $i < $count; $i++) {
$X += ($x[$i] + $x[$i+1]) * ($x[$i] * $y[$i+1] - $x[$i+1] * $y[$i]);
$Y += ($y[$i] + $y[$i+1]) * ($x[$i] * $y[$i+1] - $x[$i+1] * $y[$i]);
}
$X *= 1 / (6 * $S);
$Y *= 1 / (6 * $S);
print "$X, $Y\n";
?>
トラックバック URL:
https://perltips.twinkle.cc/trackback/242