t_eye eye_with_skpoints(t_point c, t_point i, t_point j, double o) { t_eye e; e.c = c; e.i = geo_vector_pp(e.c, i); e.j = geo_vector_pp(e.c, j); e.pl = geo_plan_pvv(e.c, e.i, e.j); e.o = geo_point_pv(e.c, V_UNIT(geo_vector_normal_pl(e.pl)), o); return (e); }
krui_err SnnsCLib::bn_art2_createNet (int f1Units, int f1Rows, int f2Units, int f2Rows) { krui_err ret_code = KRERR_NO_ERROR; int i, j; /********* create units ******************/ /* create Input Layer */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, INP_X, INP_Y, 1, 1, const_cast<char*>("inp"), INPUT, ACTF_INP, OUTF_INP, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create W-Units */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, W_X, W_Y, F1_SEP_X, F1_SEP_Y, const_cast<char*>("w"), HIDDEN, ACTF_W, OUTF_W, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create X-Units */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, X_X, X_Y, F1_SEP_X, F1_SEP_Y, const_cast<char*>("x"), HIDDEN, ACTF_X, OUTF_X, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create U-Units */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, U_X, U_Y, F1_SEP_X, F1_SEP_Y, const_cast<char*>("u"), HIDDEN, ACTF_U, OUTF_U, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create V-Units */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, V_X, V_Y, F1_SEP_X, F1_SEP_Y, const_cast<char*>("v"), HIDDEN, ACTF_V, OUTF_V, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create P-Units */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, P_X, P_Y, F1_SEP_X, F1_SEP_Y, const_cast<char*>("p"), HIDDEN, ACTF_P, OUTF_P, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create Q-Units */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, Q_X, Q_Y, F1_SEP_X, F1_SEP_Y, const_cast<char*>("q"), HIDDEN, ACTF_Q, OUTF_Q, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create R-Units */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, R_X, R_Y, F1_SEP_X, F1_SEP_Y, const_cast<char*>("r"), HIDDEN, ACTF_R, OUTF_R, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create Recognition Layer */ ret_code = bn_art2_make_layer (f2Units, f2Rows, F2_COLS, REC_X, REC_Y, 1, 1, const_cast<char*>("rec"), SPECIAL, ACTF_REC, OUTF_REC, 0, NULL, NULL); CHECK_RETURN (ret_code); ret_code = bn_art2_make_layer (f2Units, f2Rows, F2_COLS, RST_X, RST_Y, 1, 1, const_cast<char*>("rst"), HIDDEN, ACTF_RST, OUTF_RST, 0, NULL, NULL); CHECK_RETURN (ret_code); /********* Create Links **************************************/ /* TO w units */ for (i=1; i<=f1Units; i++) { ret_code = krui_setCurrentUnit (W_UNIT(i)); CHECK_RETURN (ret_code); /* FROM inp units */ ret_code = krui_createLink (INP_UNIT(i),0.0); CHECK_RETURN (ret_code); /* FROM u units */ ret_code = krui_createLink (U_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO x units */ for (i=1; i<=f1Units; i++) { ret_code = krui_setCurrentUnit (X_UNIT(i)); CHECK_RETURN (ret_code); /* FROM w units */ ret_code = krui_createLink (W_UNIT(i),0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO u units */ for (i=1; i<=f1Units; i++) { ret_code = krui_setCurrentUnit (U_UNIT(i)); CHECK_RETURN (ret_code); /* FROM v units */ ret_code = krui_createLink (V_UNIT(i),0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO v units */ for (i=1; i<=f1Units; i++) { ret_code = krui_setCurrentUnit (V_UNIT(i)); CHECK_RETURN (ret_code); /* FROM x units */ ret_code = krui_createLink (X_UNIT(i),0.0); CHECK_RETURN (ret_code); /* FROM q unit */ ret_code = krui_createLink (Q_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO p units */ for (i=1; i<=f1Units; i++) { ret_code = krui_setCurrentUnit (P_UNIT(i)); CHECK_RETURN (ret_code); /* FROM rec units */ for (j=1; j<=f2Units; j++) { ret_code = krui_createLink (REC_UNIT(j),0.0); CHECK_RETURN (ret_code); } /*for*/ /* FROM u unit */ ret_code = krui_createLink (U_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO q units */ for (i=1; i<=f1Units; i++) { ret_code = krui_setCurrentUnit (Q_UNIT(i)); CHECK_RETURN (ret_code); /* FROM p unit */ ret_code = krui_createLink (P_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO r units */ for (i=1; i<=f1Units; i++) { ret_code = krui_setCurrentUnit (R_UNIT(i)); CHECK_RETURN (ret_code); /* FROM p unit */ ret_code = krui_createLink (P_UNIT(i), 0.0); CHECK_RETURN (ret_code); /* FROM inp unit */ ret_code = krui_createLink (INP_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO rec units */ for (i=1; i<=f2Units; i++) { ret_code = krui_setCurrentUnit (REC_UNIT(i)); CHECK_RETURN (ret_code); /* FROM p units */ for (j=1; j<=f1Units; j++) { ret_code = krui_createLink (P_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* FROM rst unit */ ret_code = krui_createLink (RST_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO rst units */ for (i=1; i<=f2Units; i++) { ret_code = krui_setCurrentUnit (RST_UNIT(i)); CHECK_RETURN (ret_code); /* FROM rec units */ ret_code = krui_createLink (REC_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ //printf (" Done.\n"); /* set the update function */ ret_code = krui_setUpdateFunc (UPDATE_FUNC_NAME); CHECK_RETURN( ret_code ); /* set the learning function */ ret_code = krui_setLearnFunc (LEARN_FUNC_NAME); return (ret_code); }