//多角形srcPolyを平行移動・回転する。
        //まず, 「多角形dstPolyの頂点dstPointId --> dstPointId + direction」と「多角形srcPolyの頂点srcPointId --> srcPointId - direction」
        //が同じ方向を向くように回転する。
        //次に, 「多角形dstPolyの頂点dstPointId」と「多角形srcPolyの頂点srcPointId」がくっつくように平行移動する。
        private void move(Poly dstPoly, Poly srcPoly, int dstPointId, int srcPointId, int direction, bool isUpdateLines = false)
        {
            Point mul = (dstPoly[dstPointId + direction] - dstPoly[dstPointId]) / (srcPoly[srcPointId - direction] - srcPoly[srcPointId]);

            mul /= mul.Abs;
            srcPoly.Mul(mul, isUpdateLines);

            Point t = dstPoly.points[dstPointId] - srcPoly.points[srcPointId];

            srcPoly.Trans(t, isUpdateLines);
        }
        //srcPolyとdstPolyを2点で合わせる
        private void move(Poly dstPoly, Poly srcPoly, int dstPointId, int srcPointId, bool turnflag, bool isUpdateLine)
        {
            if (turnflag)
            {
                srcPoly.Turn(isUpdateLine);
            }
            Point mul = (dstPoly[dstPointId + 1] - dstPoly[dstPointId]) / (srcPoly[srcPointId + 1] - srcPoly[srcPointId]);

            mul /= mul.Abs;
            srcPoly.Mul(mul, isUpdateLine);
            srcPoly.Trans(dstPoly[dstPointId] - srcPoly[srcPointId], isUpdateLine);
        }