1 package jp.nyatla.nyartoolkit.rpf.tracker.nyartk.status;
\r
3 import jp.nyatla.nyartoolkit.NyARException;
\r
4 import jp.nyatla.nyartoolkit.core.types.NyARDoublePoint2d;
\r
5 import jp.nyatla.nyartoolkit.core.types.NyARLinear;
\r
6 import jp.nyatla.nyartoolkit.core.utils.NyARManagedObjectPool;
\r
7 import jp.nyatla.nyartoolkit.rpf.utils.LineBaseVertexDetector;
\r
8 import jp.nyatla.nyartoolkit.rpf.utils.VecLinearCoordinates;
\r
9 import jp.nyatla.nyartoolkit.rpf.utils.VecLinearCoordinatesOperator;
\r
12 * このクラスは、{@link NyARRectTargetStatus}型のプールクラスです。
\r
13 * 通常、ユーザが使うことはありません。
\r
15 public class NyARRectTargetStatusPool extends NyARManagedObjectPool<NyARRectTargetStatus>
\r
17 /** 要素間で共有するオブジェクト。この変数は、NyARRectTargetStatus以外から使わないでください。*/
\r
18 public VecLinearCoordinates _vecpos=new VecLinearCoordinates(100);
\r
19 /** 要素間で共有するオブジェクト。この変数は、NyARRectTargetStatus以外から使わないでください。*/
\r
20 public LineBaseVertexDetector _line_detect=new LineBaseVertexDetector();
\r
21 /** 要素間で共有するオブジェクト。この変数は、NyARRectTargetStatus以外から使わないでください。*/
\r
22 public VecLinearCoordinatesOperator _vecpos_op=new VecLinearCoordinatesOperator();
\r
23 /** 要素間で共有するオブジェクト。この変数は、NyARRectTargetStatus以外から使わないでください。*/
\r
24 public VecLinearCoordinates.VecLinearCoordinatePoint[] _indexbuf=new VecLinearCoordinates.VecLinearCoordinatePoint[4];
\r
25 /** 要素間で共有するオブジェクト。この変数は、NyARRectTargetStatus以外から使わないでください。*/
\r
26 public NyARLinear[] _line=NyARLinear.createArray(4);
\r
29 * プールの最大サイズを利用して、インスタンスを生成します。
\r
32 * @throws NyARException
\r
34 public NyARRectTargetStatusPool(int i_size) throws NyARException
\r
36 super.initInstance(i_size,NyARRectTargetStatus.class);
\r
39 * この関数は、リスト要素を生成して返します。
\r
41 protected NyARRectTargetStatus createElement()
\r
43 return new NyARRectTargetStatus(this);
\r
46 private final int[] __sq_table=new int[4];
\r
48 * この関数は、頂点同士の移動距離を測定して、極端に大きな差を含む点が無いかをチェックします。
\r
49 * 点セット同士の順番は一致している必要があります。
\r
50 * チェックルールは、頂点セット同士の差のうち一つが、全体の一定割合以上の誤差を持つかです。
\r
51 * この関数は矩形の辺推定の誤認識対策用のコードですが、より良い方法が見つかったら消してもかまいません。
\r
59 public final boolean checkLargeDiff(NyARDoublePoint2d[] i_point1,NyARDoublePoint2d[] i_point2)
\r
61 assert(i_point1.length==i_point2.length);
\r
62 int[] sq_tbl=this.__sq_table;
\r
64 for(int i=3;i>=0;i--){
\r
65 sq_tbl[i]=(int)i_point1[i].sqDist(i_point2[i]);
\r
72 for(int i=3;i>=0;i--){
\r
73 //1個が全体の75%以上を持っていくのはおかしい。
\r
74 if(sq_tbl[i]*100/all>70){
\r