お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"多角形の面積と重心を求める"

この発言に対し以下のコメントが寄せられています
#00752 kiima さん RE:多角形の面積と重心を求める

多角形の面積と重心点を求める nifty:FDELPHI/MES/19/62269 からのツリーで 裏目小僧 さんに教えてもらっ た方法です。アルゴリズムの詳細はツリーを見ていただいたほうが解かりやす いでしょう。(私の物分かりが悪かったので詳細に説明戴きました)(^^; type TPointF = record x,y: Extended; end; function GetPolygonArea2(pt: array of TPointF; var gp: TPointF) : Extended; var i,j: Integer; Mx,My: Extended; dax,sax,say: Extended; dcgx,dcgy,scgx,scgy: Extended; dx,dy: Extended; wt: Extended; begin wt := 0; //面積累積をクリア Mx:=0; //X軸モーメント累積レジスタをクリア My:=0; //Y軸モーメント累積レジスタをクリア for i:=0 to High(pt) do begin j := (i+1) mod (High(pt)+1); dy:=(pt[j].y-pt[i].y); dx:=(pt[j].x-pt[i].x); dax := dx*dy/2; //投影三角形の面積(X/Y共通) sax := dx*pt[i].y; //X軸投影四角形の面積 say := dy*pt[i].x; //Y軸投影四角形の面積 dcgx := pt[j].x-dx/3; //X軸投影三角形の重心点X座標 dcgy := pt[j].y-dy/3; //Y軸投影三角形の重心点Y座標 scgx := pt[j].x-dx/2; //X軸投影三角形の重心点X座標 scgy := pt[j].y-dy/2; //Y軸投影三角形の重心点Y座標 Mx:=Mx+dax*dcgx+sax*scgx; //X軸投影回転モメント My:=My+dax*dcgy+say*scgy; //Y軸投影回転モメント wt := wt+dax+sax; end; gp.x:=Mx/wt; //重心X座標 gp.y:=My/(-wt); //重心Y座標 Result := Abs(wt); end; /*** kiima | CXG00064@nifty.ne.jp ***/ Original document by kiima 氏 ID:(CXG00064)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum