問題の状況:
二次元の不規則な形状(本体画像)のために、重心を見つけます。
アイデアの分析:
1.中心に区別。横軸は、最小の中心と最大平均横、縦その逆です。
前記重心は、例えば、横座標X =(x1m1 + x2m2 +‥+ ximi)/ M、その逆座標の他の方向、式の概念を参照することができます。
ソリューション:
1.実行するための独自の方法は、グラフィカル点が1mであるとして単に見られるべきです。コード付き:
プライベート PointF getCore1(一覧<ポイント> ポイント) { PointF芯 = 新しいPointF()。 フロート SUMX = 0 。 フロートスミ= 0 。 foreachの(点点における点) { SUMX + = point.X。 スミ + = point.Y。 } コア = 新しい PointF(SUMX /(フロート)points.Count、スミ/(フロート)points.Count)。 リターンコア; }
研究者は疑問にしたい場合は、一時的に、その意味を理解する2.別の方法。コード付き:
パブリック 静的 PointF getCore2(一覧<ポイント> mPoints) { 二重面積= 0.0。// 多边形面积 二重のGx = 0.0、グレイ= 0.0。// 重心的X、Y 用(INT iは= 1 ; I <= mPoints.Count I ++ ) { ダブル ILAT = mPoints [I%mPoints.Count] .X。 ダブル iLng = mPoints [I%mPoints.Count] .Y。 ダブル nextLat = mPoints [I - 1 ] .X。 ダブルnextLng = mPoints [I - 1 ] .Y。 二重 TEMP =(ILAT * nextLng - iLng * nextLat)/ 2.0 。 エリア + = TEMP。 GX + = TEMP *(ILAT + nextLat)/ 3.0 。 GY + = TEMP *(iLng + nextLng)/ 3.0 。 } のGx = Gxと/ 領域; GY = GY / 領域; 返す 新しい PointFを((フロート)GX、(フロート)GY)。 }
この方法では、ルールは不規則なため、0にグラフィックス領域につながります。