示例#1
0
	    /**
	     * 画面上の点が、このターゲットを包括する矩形の内側にあるかを判定します。
	     * この関数は、Known/Unknownターゲットに使用できます。
	     * @param i_x
	     * @param i_y
	     * @return
	     * <p>メモ:この関数にはnewが残ってるので注意</p>
	     */
        public bool isInnerRectPoint2d(int i_x, int i_y)
	    {
            Debug.Assert(this._target_type == RT_UNKNOWN || this._target_type == RT_KNOWN);
		    NyARIntRect rect=new NyARIntRect();
		    NyARDoublePoint2d[] vx=((NyARRectTargetStatus)(this._ref_tracktarget._ref_status)).vertex;
		    rect.setAreaRect(vx,4);
		    return rect.isInnerPoint(i_x, i_y);
	    }
示例#2
0
        /**
         * このデータが初期チェック(CoordからRectへの遷移)をパスするかチェックします。
         * 条件は、
         *  1.検出四角形の対角点は元の検出矩形内か?
         *  2.一番長い辺と短い辺の比は、0.1~10の範囲か?
         *  3.位置倍長い辺、短い辺が短すぎないか?
         * @param i_sample_area
         * この矩形を検出するために使った元データの範囲(ターゲット検出範囲)
         */
        private bool checkInitialRectCondition(NyARIntRect i_sample_area)
        {
            NyARDoublePoint2d[] this_vx = this.vertex;

            //検出した四角形の対角点が検出エリア内か?
            int cx = (int)(this_vx[0].x + this_vx[1].x + this_vx[2].x + this_vx[3].x) / 4;
            int cy = (int)(this_vx[0].y + this_vx[1].y + this_vx[2].y + this_vx[3].y) / 4;

            if (!i_sample_area.isInnerPoint(cx, cy))
            {
                return(false);
            }


            //一番長い辺と短い辺の比を確認(10倍の比があったらなんか変)
            int max = int.MinValue;
            int min = int.MaxValue;

            for (int i = 0; i < 4; i++)
            {
                int t = (int)this_vx[i].sqDist(this_vx[(i + 1) % 4]);
                if (t > max)
                {
                    max = t;
                }
                if (t < min)
                {
                    min = t;
                }
            }
            //比率係数の確認
            if (max < (5 * 5) || min < (5 * 5))
            {
                return(false);
            }
            //10倍スケールの2乗
            if ((10 * 10) * min / max < (3 * 3))
            {
                return(false);
            }
            return(true);
        }