Esempio n. 1
0
        //類似度計算。
        //アルゴリズム:
        //poly1とpoly2を「面積が1」になるように拡大・縮小する。
        //外接円の半径r1, r2をそれぞれ求める。
        //Abs(Log(r1 / r2))を返す。
        private double EvalCircleRadiusLog(Poly poly1, Poly poly2)
        {
            if (Math.Abs(poly1.Area) < 1e-9 || Math.Abs(poly2.Area) < 1e-9)
            {
                return(1145141919);
            }

            Scaling(poly1, 1.0 / Math.Sqrt(Math.Abs(poly1.Area)));
            Scaling(poly2, 1.0 / Math.Sqrt(Math.Abs(poly2.Area)));
            FixPoly(poly1, 0.01);
            FixPoly(poly2, 0.01);

            Circle c1 = poly1.MinestCoverCircle();
            Circle c2 = poly2.MinestCoverCircle();
            double r1 = c1.r;
            double r2 = c2.r;

            if (r1 < 1e-9 || r2 < 1e-9)
            {
                return(1145141919);
            }
            return(Math.Abs(Math.Log(r1 / r2)));
        }