解決済みの質問
#6 です.訂正&補足します.
まず,#6 の Yg の式は符号が逆でした.m(_ _)m
つまり,
Yg = (1 / (6 * S)) * Σ(i=1,n) (Yi^2 + Yi * Y(i+1) + Y(i+1)^2) * (Xi - X(i+1)).
それから Xg,Yg の式は,次のようにもう少し簡単になります.
Xg = (1 / (6 * S)) * Σ(i=1,n) (Xi + X(i+1)) * (Xi * Y(i+1) - X(i+1) * Yi).
Yg = (1 / (6 * S)) * Σ(i=1,n) (Yi + Y(i+1)) * (Xi * Y(i+1) - X(i+1) * Yi).
テストプログラムを作って計算してみました.実行結果を次に示します.
(1次モーメントとあるのは,Xg * S および Yg * S のことです.)
●正三角形
P[1]:(0, 0)
P[2]:(1, 0)
P[3]:(0.5, 0.866025)
面積:0.433013
1次モーメント:(0.216506, 0.125)
重心:(0.5, 0.288675)
●正方形 (#5 さんの例)
P[1]:(10, 10)
P[2]:(-10, 10)
P[3]:(-10, -10)
P[4]:(10, -10)
面積:400
1次モーメント:(0, 0)
重心:(0, 0)
●十角形 (同じく #5 さんの例)
P[1]:(10, 10)
P[2]:(9, 10.1)
P[3]:(8, 10.2)
P[4]:(7, 10.3)
P[5]:(-7, 10.3)
P[6]:(-8, 10.2)
P[7]:(-9, 10.1)
P[8]:(-10, 10)
P[9]:(-10, -10)
P[10]:(10, -10)
面積:405.1
1次モーメント:(0, 51.72)
重心:(0, 0.127672)
投稿日時 - 2006-11-17 01:19:03
5人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(6件中 1~5件目)
一般の多角形の重心の公式を導いてみました.
多角形の頂点を Pi=(Xi,Yi) (i=1,…,n) とし,また P(n+1)=P1 と定義すると,
・多角形の向き付き面積 (頂点列が左回り順ならば+,右回り順ならば-)
S = (1/2)Σ(i=1,n) (Xi * Y(i+1) - X(i+1) * Yi).
・重心のX座標
Xg = (1 / (6 * S)) * Σ(i=1,n) (Xi^2 + Xi * X(i+1) + X(i+1)^2) * (Y(i+1) - Yi).
・重心のY座標
Yg = (1 / (6 * S)) * Σ(i=1,n) (Yi^2 + Yi * Y(i+1) + Y(i+1)^2) * (X(i+1) - Xi).
一応,検算として,n=3 の場合によく知られた三角形の重心の公式
Xg = (X1 + X2 + X3) / 3
Yg = (Y1 + Y2 + Y3) / 3
になることは確認したつもりです.
どなたか,具体例に当てはめてチェックしていただけるとありがたいです.
(私は公式を導くだけで疲れました.orz)
証明はちょっと面倒で,ベクトル解析の知識が必要です.
(知識のない方は読み飛ばしてください.)
長くなるので概要だけ示します.
まず,一般の図形の図心 (密度一定の場合の重心) の定義は次のように,
図形内部の面積分で定義される.
Xg = ∫X dS / ∫dS.
Yg = ∫Y dS / ∫dS.
上の2つの式の分母はもちろん図形の面積で,
∫dS = ∫Y dX (積分路は右回り)
= -∫Y dX (積分路は左回り)
で求められる.(図を描いてみればすぐにわかります.)
多角形の場合には最初に示したSの式になる.
分子の計算は厄介.分母の場合と同様に,面積分を図形の境界上の線積分に変換するが,
ストークスの定理を用いるため,Z軸を付け加えて3次元で考える.
図形はもちろんXY平面上にあるので,その単位法線ベクトルNは (0, 0, 1).
rot A = (0, 0, X) となるようなベクトルAを考えると,ストークスの定理により
∫X dS = ∫(rot A)・N dS = ∫ A・dL (dL = (dx, dy, dz))
A=(0, X^2/2, 0) とすると rot A=(0, 0, X) なので
∫X dS = ∫ (X^2/2) dy.
これを多角形の場合について計算すると,上記の Xg の式になる.Yg も同様.
重心 (Wikipedia)
http://ja.wikipedia.org/wiki/%E9%87%8D%E5%BF%83
ストークスの定理 (Wikipedia)
http://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AF%E3%82%B9%E3%81%AE%E5%AE%9A%E7%90%86
投稿日時 - 2006-11-16 20:51:45
重心ですか.なるほど.
ちなみに多角形は密度一定の剛体ですよね.これは難しい・・・
明解な回答を思いつかなかったですので,詭弁を(笑)
多角形を複数の三角形に分割し,各三角形の重心を計算してから更にその重心を求めるという方法でどうでしょう? ^^
参考URL:http://www12.plala.or.jp/ksp/mechanics/CG/ , http://www.nikonet.or.jp/spring/heso/heso2_1.htm
投稿日時 - 2006-11-12 18:12:19