Exemplo n.º 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);
 }
Exemplo n.º 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;
        }