private static int selectHistory(NyARSurfaceFeatures candidate, NyARFeatureCoordPtrList i_prev_log) { int j; for (int i = 0; i < i_prev_log.getLength(); i++) { NyARNftFsetFile.NyAR2FeatureCoord prev_item = i_prev_log.getItem(i); for (j = 0; j < candidate.getLength(); j++) { NyARSurfaceFeatureItem item = candidate.getItem(j); // 過去ログでも検出した形跡があったものを選択する。 if (prev_item == item.ref_feature) { return(j); } } } //残ってない if (candidate.getLength() == 0) { return(-1); } //適当に返す int k = (int)((double)candidate.getLength() * _rand.rand() / (RepeatedRandomizer.RAND_MAX + 1.0f)); for (int i = j = 0; i < candidate.getLength(); i++) { if (j == k) { return(i); } j++; } return(-1); }
/** * インスタンスの状態をリセットする。 */ /** * o_posの状況に対応して、candidateから候補IDを選択します。 * @param candidate * @param prelog * @param o_pos * @param xsize * @param ysize * @return */ public int ar2SelectTemplate(NyARSurfaceFeatures candidate, NyARFeatureCoordPtrList prelog, NyARSurfaceFeaturesPtr o_pos, NyARIntSize i_screen_size) { switch (o_pos.getLength()) { case 0: return(select0(candidate, i_screen_size.w, i_screen_size.h)); case 1: return(select1(candidate, i_screen_size.w, i_screen_size.h, o_pos.getItem(0))); case 2: return(select2(candidate, i_screen_size.w, i_screen_size.h, o_pos.getItem(0), o_pos.getItem(1))); case 3: return(select3(candidate, i_screen_size.w, i_screen_size.h, o_pos.getItem(0), o_pos.getItem(1), o_pos.getItem(2))); default: return(selectHistory(candidate, prelog)); } }