int nice_homography(const double * H) { double det = H[0] * H[4] - H[3] * H[1]; if (det < 0) return 0; double N1 = fast_sqrt( dSquare(H[0]) + dSquare(H[3]) ); if (N1 > 4) return 0; if (N1 < 0.1) return 0; double N2 = fast_sqrt( dSquare(H[1]) + dSquare(H[4]) ); if (N2 > 4) return 0; if (N2 < 0.1) return 0; double N3 = fast_sqrt( dSquare(H[6]) + dSquare(H[7]) ); if (N3 > 0.002) return 0; return 1; }
double FindShiTomasiScoreAtPoint(const unsigned char *image, const int stride, const xy *irCenter) { double dXX = 0.0; double dYY = 0.0; double dXY = 0.0; const int cpos = irCenter->y * stride + irCenter->x; const int *win = shiTomasiWin; int len = 196 / 4; while(-- len > -1) { const double __dx0 = (double)image[ *(win++) + cpos ]; const double __dx1 = (double)image[ *(win++) + cpos ]; const double __dy0 = (double)image[ *(win++) + cpos ]; const double __dy1 = (double)image[ *(win++) + cpos ]; const double dx = __dx0 - __dx1; const double dy = __dy0 - __dy1; dXX += dx*dx; dYY += dy*dy; dXY += dx*dy; } const double nPixels = 0.002551020408163265;//1.0 / (2.0 * (double)((nx+1) * (ny+1))); dXX = dXX * nPixels; dYY = dYY * nPixels; dXY = dXY * nPixels; // Find and return smaller eigenvalue: return (double)0.5 * (dXX + dYY - fast_sqrt( (dXX + dYY) * (dXX + dYY) - (double)4.0 * (dXX * dYY - dXY * dXY) )); }
static inline double color_distance( uint8_t Cb, uint8_t Cr, int Cbk, int Crk, const double dA, const double dB ) { double tmp = 0.0; fast_sqrt( tmp, (Cbk - Cb) * (Cbk-Cb) + (Crk - Cr) * (Crk - Cr) ); if( tmp < dA ) { /* near color key == bg */ return 0.0; } if( tmp < dB ) { /* middle region */ return (tmp - dA)/(dB - dA); /* distance to key color */ } return 1.0; /* far from color key == fg */ }
static inline int intersect_sphere(rt_context_t *rtx, unsigned int index) { int r = FALSE; vec3_t v = vec3_sub(rtx->ray.pos, rtx->obj[index].pos); float b, d; b = -dot(v, rtx->ray.dir); float rad = rtx->obj[index].rad; d = b * b - dot(v, v) + rad * rad; if (d > 0.0f) { float dsqr = fast_sqrt(d); float t0 = b - dsqr; if ((t0 > 0.0f) && (t0 < rtx->dist)) { rtx->dist = t0; r = TRUE; } } return r; }
static int calculate(int x, int y, int d) { return (int)fast_sqrt(x*x + y*y); }
void show_smileys_cb(smiley_callback_data *data) { eb_local_account *account; LList *smileys = NULL; protocol_smiley *msmiley = NULL; GtkWidget *smileys_table = NULL; GtkWidget *button = NULL; GtkWidget *iconwid; GdkPixbuf *icon; GtkWidget *smiley_window; LList *done = NULL; LList *l; smiley *dsmile = NULL; int real_len = 0, x = -1, y = 0; int win_w = 0, win_h = 0, w, h; int win_x, win_y; int rows, cols; if (data && data->c_window) account = data->c_window->conv->local_user; else { eb_debug(DBG_CORE, "no chat* in data !\n"); return; } /* close popup if open */ if (data->c_window && data->c_window->smiley_window) { gtk_widget_destroy(data->c_window->smiley_window); data->c_window->smiley_window = NULL; return; } if (account && RUN_SERVICE(account)->get_smileys) smileys = RUN_SERVICE(account)->get_smileys(); else return; for (; smileys; smileys = smileys->next) { gboolean already_done = FALSE; msmiley = smileys->data; for (l = done; l; l = l->next) { protocol_smiley *done_smiley = l->data; if (!strcmp(msmiley->name, done_smiley->name)) { already_done = TRUE; break; } } if (already_done || !get_smiley_by_name(msmiley->name)) continue; done = l_list_append(done, msmiley); real_len++; } rows = fast_sqrt(real_len) - 1; if (rows < 5) rows = 5; cols = real_len / rows + !(!(real_len % rows)); smileys_table = gtk_table_new(rows, cols, TRUE); for (l = done; l; l = l_list_next(l)) { msmiley = l->data; dsmile = get_smiley_by_name_and_service(msmiley->name, GET_SERVICE(account).name); if (dsmile != NULL) { GtkWidget *parent = NULL; if (data && data->c_window) parent = data->c_window->window; icon = gdk_pixbuf_new_from_xpm_data((const char **) dsmile->pixmap); iconwid = gtk_image_new_from_pixbuf(icon); sscanf(dsmile->pixmap[0], "%d %d", &w, &h); if (x < rows) { x++; if (y == 0) win_h += h + 2; } if (x == rows) { y++; x = 0; win_w += w + 2; } gtk_widget_show(iconwid); button = gtk_button_new(); gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); gtk_container_add(GTK_CONTAINER(button), iconwid); gtk_widget_show(button); gtk_widget_set_name(button, msmiley->text); g_signal_connect(button, "clicked", G_CALLBACK(insert_smiley_cb), data); gtk_table_attach(GTK_TABLE(smileys_table), button, y, y + 1, x, x + 1, GTK_FILL, GTK_FILL, 0, 0); } } l_list_free(done); done = NULL; smiley_window = gtk_window_new(GTK_WINDOW_POPUP); gtk_window_set_transient_for(GTK_WINDOW(smiley_window), GTK_WINDOW(data->c_window->window)); gtk_window_set_modal(GTK_WINDOW(smiley_window), FALSE); gtk_window_set_wmclass(GTK_WINDOW(smiley_window), "ayttm-chat", "Ayttm"); gtk_window_set_title(GTK_WINDOW(smiley_window), "Smileys"); gtk_window_set_resizable(GTK_WINDOW(smiley_window), FALSE); gtk_widget_realize(smiley_window); g_signal_connect(smiley_window, "delete-event", G_CALLBACK(delete_event_cb), (gpointer) data); gtk_container_add(GTK_CONTAINER(smiley_window), smileys_table); gtk_widget_show(smileys_table); /* move the window a bit after the cursor and in the screen */ gdk_window_get_pointer(NULL, &win_x, &win_y, NULL); win_x += 5; win_y += 5; while ((win_x) + win_w > gdk_screen_width() - 30) win_x -= 20; while ((win_y) + win_h > gdk_screen_height() - 30) win_y -= 20; gtk_window_move(GTK_WINDOW(smiley_window), win_x, win_y); if (data && data->c_window) data->c_window->smiley_window = smiley_window; gtk_widget_show(smiley_window); }
void normalizePoints(const int number_of_correspondences, const double *u_v_up_vp, double *normalized_u_v_up_vp, double *T1, double *T2inv) { const double invN = (double)1.0 / (double)number_of_correspondences; const double sqrt2N = SQRT2 * (double)number_of_correspondences; double u_sum = 0., v_sum = 0., up_sum = 0., vp_sum = 0; int i, j; for(i = 0, j = 0; i < number_of_correspondences; i++) { u_sum += u_v_up_vp[j++]; v_sum += u_v_up_vp[j++]; up_sum += u_v_up_vp[j++]; vp_sum += u_v_up_vp[j++]; } double u_mean = u_sum * invN; double v_mean = v_sum * invN; double up_mean = up_sum * invN; double vp_mean = vp_sum * invN; // translate mean to origin, compute sum of distances from origin double dist_sum = 0, distp_sum = 0; double n_up_vp_um, n_up_vp_vm; for(i = 0; i < number_of_correspondences; i++) { normalized_u_v_up_vp[4 * i ] = ( n_up_vp_um = u_v_up_vp[4 * i ] - u_mean ); normalized_u_v_up_vp[4 * i + 1] = ( n_up_vp_vm = u_v_up_vp[4 * i + 1] - v_mean ); dist_sum += fast_sqrt( dSquare(n_up_vp_um) + dSquare(n_up_vp_vm) ); normalized_u_v_up_vp[4 * i + 2] = ( n_up_vp_um = u_v_up_vp[4 * i + 2] - up_mean ); normalized_u_v_up_vp[4 * i + 3] = ( n_up_vp_vm = u_v_up_vp[4 * i + 3] - vp_mean ); distp_sum += fast_sqrt( dSquare(n_up_vp_um) + dSquare(n_up_vp_vm) ); } // compute normalizing scale factor ( average distance from origin = sqrt(2) ) double scale = sqrt2N / dist_sum; double scalep = sqrt2N / distp_sum; // apply scaling for(i = 0, j = 0; i < number_of_correspondences; i++) { normalized_u_v_up_vp[j++] *= scale; normalized_u_v_up_vp[j++] *= scale; normalized_u_v_up_vp[j++] *= scalep; normalized_u_v_up_vp[j++] *= scalep; } // assemble transformation Matrices, used at denormalization T1[1] = T1[3] = T1[6] = T1[7] = 0.0; T1[0] = scale; T1[2] = -scale * u_mean; T1[4] = scale; T1[5] = -scale * v_mean; T1[8] = (double)1.0; T2inv[1] = T2inv[3] = T2inv[6] = T2inv[7] = 0.0; T2inv[0] = (double)1. / scalep; T2inv[2] = up_mean; T2inv[4] = (double)1. / scalep; T2inv[5] = vp_mean; T2inv[8] = (double)1.0; }