Пример #1
0
Axes::Axe DataMotion::determineAxe(Point * p1, Point * p2)
{
    QVector<float> distance = calculDistance(p1, p2);

    float max = qAbs(distance.at(0));// Ne pas remplacer 0 par Axes::X car cela a des effets de bords

    for (int i=1; i<distance.size(); i++)
    {
        max = qMax(qAbs(max), qAbs(distance.at(i)));
    }
    qDebug() << distance;

    Axes::Axe res = Axes::UNDEFINED;

    if (max == qAbs(distance.at(Coordonnees::X)))
        res = Axes::X;
    if (max == qAbs(distance.at(Coordonnees::Y)))
        res = Axes::Y;
    if (max == qAbs(distance.at(Coordonnees::Z)))
        res = Axes::Z;

    //if (distance.at(Coordonnees::X) < 8) // Ne fonctionne pas correctement
    //    res = Axes::ALL;

    return res;
}
Пример #2
0
// a faire lecture plusieur fois de la distance et moy var et exclusion des valeur extreme sur genre 10 val
// 20 ms max par boucle si rien autour => 200 ms par mesure de 10
void Scan::writeAngle(int angle) {
	scanner->servo.write(angle);
	double distance = calculDistance();

	if ( scanner->taille < MAXSIZE ) {
		scanner->taille += snprintf(scanner->data + (scanner->taille),MAXSIZE-(scanner->taille),"%.2f,",distance);
	}
}
Пример #3
0
void		set_coef(t_star *star, int x, int y)
{
  int		coef;

  if (star->open_list[x][y] != -1)
    {
      coef = calculDistance(x, star->end_x, y, star->end_y) * 10;
      coef += calcul_indice(star, x, y) + 1;
      star->open_list[x][y] = coef;
    }
}
Пример #4
0
 float Position::calculDistance(Position P)
 {
     return calculDistance(P.getX(), P.getY());
 }
Пример #5
0
void RT_secondOrder(Pnum* m,Pnum* velocity,unsigned nb_row, unsigned nb_col, unsigned* f, unsigned nb_points_front){

    printf("Algorithm Rouy-Tourin : problem %d x %d with finite difference second order\n",nb_row,nb_col);
    FILE *ft = gnudata_open("time_so");
    FILE *fiter = gnudata_open("iter_so");
    double time_start = give_time(), time_end = 0;
    Pnum* m_0 = (Pnum*) malloc(nb_col*nb_row*sizeof(Pnum));
    
    //Initialisation des noeuds
    int i,j;
    for (i = 0; i<nb_row; i++) {
        for (j = 0; j<nb_col; j++) {
            m_0[ind(nb_col,i,j)] = INF;
            
        }
    }
    //Initialisation des noeuds sources
    for (i = 0; i<2*nb_points_front; i+=2) {
        m_0[ind(nb_col,f[i], f[i+1])] = 0.0;
    }
    
    int s = 0, fi = 0, nb_iter = 0, convergence = 1;
    do{
        convergence = 1;
        copie(m_0, m, nb_row, nb_col);
        for (i = 0; i<nb_row; i++) {
            for (j = 0; j<nb_col; j++) {
                if (isInObstacle(velocity, nb_col, i,j)){
                    m_0[ind(nb_col, i, j)] = INF;
                    continue;
                }
                Pnum x_m1 = (i-1 >= 0)       ? m[ind(nb_col, i-1, j)] : INF;
                Pnum x_m2 = (i-2 >= 0)       ? m[ind(nb_col, i-2, j)] : INF;
                Pnum x_p1 = (i+1 < nb_col)  ? m[ind(nb_col, i+1, j)] : INF;
                Pnum x_p2 = (i+2 < nb_col)  ? m[ind(nb_col, i+2, j)] : INF;
                Pnum y_m1 = (j-1 >= 0)       ? m[ind(nb_col, i, j-1)] : INF;
                Pnum y_m2 = (j-2 >= 0)       ? m[ind(nb_col, i, j-2)] : INF;
                Pnum y_p1 = (j+1 < nb_row)  ? m[ind(nb_col, i, j+1)] : INF;
                Pnum y_p2 = (j+2 < nb_row)  ? m[ind(nb_col, i, j+2)] : INF;
                Pnum sol, Tx, Ty, Tx_m , Tx_p, Ty_m, Ty_p, f;
                f = velocity[ind(nb_col, i, j)];
                if (x_p2 < INF && x_m2 < INF && y_m2 < INF && y_p2 < INF ){
                    s++;
                    Tx_m = fmaxf((4*x_m1-x_m2)/3.0, 0); Tx_p = fminf((4*x_p1-x_p2)/3.0, 0);
                    Ty_m = fmaxf((4*y_m1-y_m2)/3.0, 0); Ty_p = fminf((4*y_p1-y_p2)/3.0, 0);
                    sol = solveEquation_2(Tx_m,Tx_p, Ty_m, Ty_p, h, f);
                }else{
                    fi++;
                    Tx = fminf(x_m1, x_p1);
                    Ty = fminf(y_m1, y_p1);
                    sol = solveEquation_1(Tx,Ty,h,f);
                }
                Pnum sol_min = fminf(m[ind(nb_col, i, j)],sol);
                m_0[ind(nb_col, i, j)] = sol_min;
                
                convergence = convergence && (fabsf( m[ind(nb_col,i, j)] - m_0[ind(nb_col, i, j)] ) <= epsilon);
            }
        }
        nb_iter++;
        
    } while (!convergence);
    
    time_end = give_time();
    dput_xy(ft, nb_row, time_end-time_start);
    dput_xy(fiter, nb_row, nb_iter);
    calculDistance(2,m, nb_col/2, nb_row/2, nb_row, nb_col);
    free(m_0);
    printf("%d itérations\n",nb_iter);
    printf("TIME : %f sec\n\n",time_end-time_start);
}
Пример #6
0
void RT_firstOrder(Pnum* m,Pnum* velocity,unsigned nb_row, unsigned nb_col, unsigned* f, unsigned nb_points_front){

    printf("Algorithm Rouy-Tourin : problem %d x %d with finite difference fisrt order\n",nb_row,nb_col);
    FILE *ft = gnudata_open("time_fo");
    FILE *fiter = gnudata_open("iter_fo");
    double time_start = give_time(), time_end = 0;
    Pnum* m_0 = (Pnum*) malloc(nb_col*nb_row*sizeof(Pnum));

    
    //Initialisation des noeuds
    int i,j,nb_iter = 0,convergence = 1;
    for (i = 0; i<nb_row; i++) {
        for (j = 0; j<nb_col; j++) {
            m_0[ind(nb_col,i,j)] = INF;
        }
    }
    
    //Initialisation des noeuds sources
    for (i = 0; i<2*nb_points_front; i+=2) {
        m_0[ind(nb_col,f[i], f[i+1])] = 0.0;
    }
    
    do{
        convergence = 1;
        copie(m_0, m, nb_row, nb_col);
        for (i = 0; i<nb_row; i++) {
            for (j = 0; j<nb_col; j++) {
                if (isInObstacle(velocity, nb_col, i,j)){
                    m_0[ind(nb_col, i, j)] = INF;
                    continue;
                }
                Pnum x_m1 = (i-1 >= 0)       ? m[ind(nb_col, i-1, j)] : INF;
                Pnum x_p1 = (i+1 < nb_col)  ? m[ind(nb_col, i+1, j)] : INF;
                Pnum y_m1 = (j-1 >= 0)       ? m[ind(nb_col, i, j-1)] : INF;
                Pnum y_p1 = (j+1 < nb_row)  ? m[ind(nb_col, i, j+1)] : INF;
                Pnum Tx = fminf(x_m1, x_p1);
                Pnum Ty = fminf(y_m1, y_p1);
                Pnum f = velocity[ind(nb_col, i, j)];
                Pnum sol = solveEquation_1(Tx,Ty,h,f);
                Pnum sol_min = fminf(m[ind(nb_col, i, j)],sol);
                m_0[ind(nb_col, i, j)] = sol_min;
                
                convergence = convergence && (fabsf( m[ind(nb_col,i, j)] - m_0[ind(nb_col, i, j)] ) <= epsilon);
            }
        }
        if (PRINT) {
            printf("\n----\n");
            print_matrice(m, nb_row, nb_col);
        }

        nb_iter++;
        
    } while (!convergence);
    
    time_end = give_time();
    dput_xy(ft, nb_row, time_end-time_start);
    dput_xy(fiter, nb_row, nb_iter);
    calculDistance(1,m, nb_col/2, nb_row/2, nb_row, nb_col);
    free(m_0);
    printf("%d itérations\n",nb_iter);
    printf("TIME : %f sec\n\n",time_end-time_start);
}