不規則な重心

問題の状況:

  二次元の不規則な形状(本体画像)のために、重心を見つけます。

アイデアの分析:

  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にグラフィックス領域につながります。

おすすめ

転載: www.cnblogs.com/gaara-zhang/p/12394668.html