
平面2次元のn角形の頂点のデータがあります。n点の座標ですから(x,y)がn個並んでいます。そのような図形の図心(重心)の座標を計算するアルゴリズムがないでしょうか。最終的にはプログラムとして離散的な処理をするため、1%ぐらいの誤差は許容範囲です。n角形と言ってもせいぜいn=3,4,5,6程度です。
欲を言うと、3次元も考えており、平面に含まれることが分かっているn個の点(3次元空間内)を平面の2次元空間に変換して重心を求め、それを3次元空間に引き戻せば3次元での重心となります。そのためにも2次元での重心の座標を求めるアルゴリズムが必要なのです。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
n角形の頂点を、辺を一周する順に番号付けて P[k], k = 0,1,2,…,n-1 とします。
図形を分割すると、重心は、分割された各部品の重心を、各部品の面積で加重平均
したものになりますから、同じ平面内に点 Q をとって、
△QP[k]P[k+1], k = 0,1,2,…,n-1 (ただし P[n] は P[0] の別名とする)
の重心 (Q + P[k] + P[k+1]) / 3 を、△QP[k]P[k+1] の面積を重みとして
加重平均すればよいことになります。Q は、P[n-1] を採用してかまいません。
その際、△QP[k]P[k+1] がn角形の中にあるか外にあるかに従って、面積に正負を
付けて扱う必要があるため、面積 △QP[k]P[k+1] = (1/2)|↑QP[k]×↑QP[k+1]| の
替わりに、絶対値をつけない ↑QP[k]×↑QP[k+1] そのものを重みとして扱うほうが
便利でしょう。スカラーの計算で済ますために、n角形が乗っている面に平行でない
ベクトル V をひとつ固定して、↑QP[k]×↑QP[k+1]・V を重みにすれば、尚よい。
外積との内積だから、スカラー三重積ですね。平面の方程式が既知ならば、その
法線ベクトルが V として使えるし、そうでなければ、V = ↑QP[0]×↑QP[1] と
してもよいです。
以上まとめると…
Q = P[n-1] とする。
V = ↑QP[0]×↑QP[1] とする。
k = 0,1,2,…,n-3 の夫々について、
X[k] = (Q + P[k] + P[k+1]) / 3 と
w[k] = ↑QP[k]×↑QP[k+1]・V を求める。
重心は、(Σ w[k] X[k]) / (Σ w[k]) である。
← No.1
順序付けの自動化は、原理的に無理でしょう。
頂点の集合が同じでも、順序付けが異なると、n角形は別のものになる訳ですから。
回答有難うございます。
紙と鉛筆で外積と内積を計算したらすぐにプログラムが組めそうです。Qを多角形の構成点P[n-1]にするというのもなるほどと思います。アルゴリズム上Qは平面上のどの点でもよいことになると思いますが、物凄く遠方だったら精度は落ちていくでしょうから構成点付近にしておくというのは分かります。全構成点の単純平均でも良いかも知れません。
有難うございました。
No.3
- 回答日時:
公式を即席で作りました。
0=(0,0)
a=(a1,a2)
b=(b1,b2)
c=(c1,c2)
として
ベクトルa,b,cが時計と反対まわりとする。
三角形0,a,bの重心g(0,a,b)と面積S(0,a,b)
重心・・・g(0,a,b)=(a+b)/3
面積・・・S(0,a,b)=(a×b)/2=(a1*b2-a2*b1)/2
四角形0,a,b,cの重心は
(S(0,a,b)*g(0,a,b)+S(0,b,c)*g(0,b,c))/(S(0,a,b)+S(0,b,c))
n角形でも同じ
回答有難うございます。
基本は、n角形を頂点を1つ共有する3角形でn-2個に分割し、その各3角形の重心を面積の重み付き平均すればよいということですか。
また、重心の座標がg(0,a,b)=(a+b)/3という簡単な式に表示できるとは知りませんでした。中学校の数学で内心、外心などともに出てきたでしょうか。すっかり抜け落ちておりました。
No.1
- 回答日時:
一例です。
http://www5d.biglobe.ne.jp/~noocyte/Programming/ …
>多角形の面積,重心(図心),断面N次モーメントの公式 ......
頂点座標の順序付けをしておくと、あとの勘定が楽チンなのですね。
順序付けの「アルゴ」も探せばありそう ..... 。
このサイトは有用でした。有難うございます。
どこかにあるはずだとは思っていましたが。このようなプログラムって理論は簡単で実際にやってみるとややこしくて、加齢によるボケ封じにはもってこいなのですが、世界に1つだけあればいいプログラムですから、コツコツやるとイライラしてくるものですよね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
面積を表す文字になぜSをつかう...
-
2つの重なった円の面積
-
イコール(=)と合同(≡)
-
ヒステリシスループの面積の計...
-
三角形の中に接する半径の等し...
-
面積1の正n角形(n>=3)の周の長...
-
6年算数
-
重積分を使って重心を求める問題
-
なぜ積分で、上の式から下の式...
-
「横倒しにした円柱容器に入っ...
-
重なっている二つの円の重複部...
-
1辺の長さがxcmの正方形ABCD. ...
-
正方形と内接する2つの4分の1円...
-
欠円の面積
-
2つの円が重なってできた図形の...
-
円を直線で切り取った部分の面...
-
ビュフォンの針
-
円の途中で切った面積の出し方...
-
楕円の一部の面積計算
-
重なり合う二つの円の面積
おすすめ情報