pub fn centroid(pts: &[[f64; 2]]) -> [f64; 2]Expand description
多角形の面積重心。
縮退した多角形(頂点が 3 個未満、または一直線に並ぶもの)は面積重心が定まらないため、 頂点の単純平均へフォールバックする。
§縮退の判定を絶対値で行わない理由
一直線に並んだ頂点の符号付き面積は厳密には 0 だが、建物座標(~1e4 mm)では
シューレース和の各項が ~1e8 になるため、丸め誤差で |面積| ~1e-8 mm² が残る。
これを 1e-9 や f64::EPSILON のような絶対値のしきい値と比べても縮退と判定できず、
残差が 6A の除算へ入って重心が発散する。
そこで面積を境界ボックスの最大辺長の 2 乗と比べる。比は無次元なので、
建物の平面(~1e4 mm)でも断面の輪郭(~1e2 mm)でも同じ判定が使える。
境界ボックスの「面積」を基準に採らないのは、縮退した多角形ではそれ自体が 0 へ
潰れて基準にならないためである。シューレース和の相対丸め誤差は頂点数 n に対し
概ね n · f64::EPSILON(~1e-15)で、しきい値 1e-12 はそれに 3 桁の余裕を持つ。