QGISジオメトリツール->ポリゴンの重心がポイント座標をどのように正確に計算しているかを知りたいのですが。たとえば、ポリゴンの境界を小さなポイントに分割し、最大距離を持つ2つのポイントのペア(長さと幅)を2つ取り、これらの2つの線の交点を重心と見なしますか?
QGISジオメトリツール->ポリゴンの重心がポイント座標をどのように正確に計算しているかを知りたいのですが。たとえば、ポリゴンの境界を小さなポイントに分割し、最大距離を持つ2つのポイントのペア(長さと幅)を2つ取り、これらの2つの線の交点を重心と見なしますか?
回答:
QGISがJTSポートであるGEOSを使用して図心を計算している場合、アルゴリズムはhttp://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/CentroidArea.htmlです。理論については、javadocにhttp://www.faqs.org/faqs/graphics/algorithms-faq/へのリンクがあります。セクション2.02:ポリゴンの重心をどのように計算できるかを参照してください。
ポリゴンの重心(別名、重心、または重心)は、ポリゴンを三角形に分割したときの重心の加重和として計算できます。三角形の重心は、その3つの頂点の平均です。つまり、座標は(x1 + x2 + x3)/ 3および(y1 + y2 + y3)/ 3です。これは、最初にポリゴンを三角形分割し、次に各三角形の面積によって重み付けされた各三角形の重心の合計を形成し、合計がポリゴンの合計面積によって正規化されることを示唆しています。これは実際に機能しますが、より簡単な方法があります。三角形分割はパーティションである必要はなく、ポリゴンの面積を計算するときに使用されるように、正と負の向きの三角形(正と負の面積を持つ)を使用できます。これにより、符号付き面積で重み付けされた三角形の重心の合計に基づいて、重心を計算するための非常に単純なアルゴリズムが導き出されます。三角形は、任意の固定点、たとえば、ポリゴンの頂点v0と、ポリゴンの連続したエッジの2つの端点((v1、v2)、(v2、v3)など)によって形成される三角形と見なすことができます。頂点がa、b、cの三角形の場合、この式の半分になります:(b [X]-a [X])*(c [Y]-a [Y])-(c [X]-a [X] )*(b [Y]-a [Y]);
Code available at ftp://cs.smith.edu/pub/code/centroid.c (3K). Reference: [Gems IV] pp.3-6; also includes code.
その方法は正確なようです。座標値がどのように使用されているかを確認したい場合や、丸め誤差などがある可能性がある場合は、JTSまたはGEOSのソースコードを確認できます。