Eigen::MatrixXd MainWindow::rotationZ( double angle ) { Eigen::MatrixXd _rotation(3,3); _rotation << cos( angle ), -sin( angle ), 0.0, sin( angle ), cos( angle ), 0.0, 0.0, 0.0, 1.0; return _rotation; }
static gboolean _key_release_event(GtkWidget *widget, GdkEventKey *event, gpointer data) { (void)widget; (void)data; //* switch(event->keyval) { case GDK_Left : case GDK_Right : case GDK_Up : case GDK_Down :_scroll(event); break; case GDK_equal : case GDK_plus : case GDK_minus :_rotation(event); break; case GDK_Page_Down: case GDK_Page_Up:_zoom(event); break; // case GDK_KEY_Escape:_resetView(&_engine.state); break; case GDK_r : //gtk_widget_draw(widget, NULL); break; // case GDK_KEY_h :_doRenderHelp = !_doRenderHelp; // _usage("s52gtk2"); // break; case GDK_v :g_print("%s\n", S52_version()); break; case GDK_x :_dumpParam(); break; case GDK_q :gtk_main_quit(); break; case GDK_w :_toggle(S52_MAR_TWO_SHADES); break; case GDK_s :_toggle(S52_MAR_SHALLOW_PATTERN); break; case GDK_o :_toggle(S52_MAR_SHIPS_OUTLINE); break; case GDK_l :_toggle(S52_MAR_FULL_SECTORS); break; case GDK_b :_toggle(S52_MAR_SYMBOLIZED_BND); break; case GDK_p :_toggle(S52_MAR_SYMPLIFIED_PNT); break; case GDK_n :_toggle(S52_MAR_FONT_SOUNDG); break; case GDK_u :_toggle(S52_MAR_SCAMIN); break; case GDK_i :_toggle(S52_MAR_ANTIALIAS); break; case GDK_j :_toggle(S52_MAR_QUAPNT01); break; case GDK_z :_toggle(S52_MAR_DISP_OVERLAP); break; //case GDK_1 :_toggle(S52_MAR_DISP_LAYER_LAST); break; case GDK_1 :_meterInc(S52_MAR_DISP_LAYER_LAST);break; case GDK_exclam:_meterDec(S52_MAR_DISP_LAYER_LAST);break; case GDK_2 :_inc(S52_MAR_ROT_BUOY_LIGHT); break; case GDK_3 :_toggle(S52_MAR_DISP_CRSR_POS); _toggle(S52_MAR_DISP_LEGEND); _toggle(S52_MAR_DISP_CALIB); _toggle(S52_MAR_DISP_DRGARE_PATTERN); break; case GDK_4 :_toggle(S52_MAR_DISP_GRATICULE); break; case GDK_5 :_toggle(S52_MAR_HEADNG_LINE); break; //case GDK_t :_meterInc(S52_MAR_SHOW_TEXT); break; //case GDK_T :_meterDec(S52_MAR_SHOW_TEXT); break; case GDK_t : case GDK_T :_toggle (S52_MAR_SHOW_TEXT); break; case GDK_c :_meterInc(S52_MAR_SAFETY_CONTOUR); break; case GDK_C :_meterDec(S52_MAR_SAFETY_CONTOUR); break; case GDK_d :_meterInc(S52_MAR_SAFETY_DEPTH); break; case GDK_D :_meterDec(S52_MAR_SAFETY_DEPTH); break; case GDK_a :_meterInc(S52_MAR_SHALLOW_CONTOUR);break; case GDK_A :_meterDec(S52_MAR_SHALLOW_CONTOUR);break; case GDK_e :_meterInc(S52_MAR_DEEP_CONTOUR); break; case GDK_E :_meterDec(S52_MAR_DEEP_CONTOUR); break; case GDK_f :_meterInc(S52_MAR_DISTANCE_TAGS); break; case GDK_F :_meterDec(S52_MAR_DISTANCE_TAGS); break; case GDK_g :_meterInc(S52_MAR_TIME_TAGS); break; case GDK_G :_meterDec(S52_MAR_TIME_TAGS); break; case GDK_y :_meterInc(S52_MAR_BEAM_BRG_NM); break; case GDK_Y :_meterDec(S52_MAR_BEAM_BRG_NM); break; case GDK_m :_meterInc(S52_MAR_DATUM_OFFSET); break; case GDK_M :_meterDec(S52_MAR_DATUM_OFFSET); break; //case GDK_7 :_disp(S52_MAR_DISP_CATEGORY, 'D'); break; // DISPLAYBASE //case GDK_8 :_disp(S52_MAR_DISP_CATEGORY, 'S'); break; // STANDARD //case GDK_9 :_disp(S52_MAR_DISP_CATEGORY, 'O'); break; // OTHER //case GDK_0 :_disp(S52_MAR_DISP_CATEGORY, 'A'); break; // OTHER (all) //case GDK_7 :_disp(S52_MAR_DISP_CATEGORY, 0); break; // DISPLAYBASE //case GDK_8 :_disp(S52_MAR_DISP_CATEGORY, 1); break; // STANDARD //case GDK_9 :_disp(S52_MAR_DISP_CATEGORY, 2); break; // OTHER //case GDK_0 :_disp(S52_MAR_DISP_CATEGORY, 3); break; // OTHER (all) case GDK_7 :_disp(S52_MAR_DISP_CATEGORY, S52_MAR_DISP_CATEGORY_BASE); break; // DISPLAYBASE case GDK_8 :_disp(S52_MAR_DISP_CATEGORY, S52_MAR_DISP_CATEGORY_STD); break; // STANDARD case GDK_9 :_disp(S52_MAR_DISP_CATEGORY, S52_MAR_DISP_CATEGORY_OTHER); break; // OTHER case GDK_0 :_disp(S52_MAR_DISP_CATEGORY, S52_MAR_DISP_CATEGORY_SELECT); break; // OTHER (all) case GDK_k :_cpal(S52_MAR_COLOR_PALETTE, 1.0);break; case GDK_K :_cpal(S52_MAR_COLOR_PALETTE, -1.0);break; case GDK_6 :_meterInc(S52_MAR_DISP_WHOLIN); break; case GDK_asciicircum: case GDK_question: case GDK_caret :_meterDec(S52_MAR_DISP_WHOLIN); break; //case GDK_3 :_cpal("S52_MAR_COLOR_PALETTE", 2.0); break; // DAY_WHITEBACK //case GDK_4 :_cpal("S52_MAR_COLOR_PALETTE", 3.0); break; // DUSK //case GDK_5 :_cpal("S52_MAR_COLOR_PALETTE", 4.0); break; // NIGHT //case GDK_F1 :S52_doneCell("/home/vitaly/CHARTS/for_sasha/GB5X01SE.000"); break; //case GDK_F2 :S52_doneCell("/home/vitaly/CHARTS/for_sasha/GB5X01NE.000"); break; case GDK_F1 :S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_SY); break; case GDK_F2 :S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_LS); break; case GDK_F3 :S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_LC); break; case GDK_F4 :S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_AC); break; case GDK_F5 :S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_AP); break; case GDK_F6 :S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_TX); break; case GDK_F7 :_mmInc(S52_MAR_DOTPITCH_MM_X); break; case GDK_F8 :_mmInc(S52_MAR_DOTPITCH_MM_Y); break; case GDK_F9 :_toggle(S52_MAR_DISP_NODATA_LAYER); break; default: g_print("key: 0x%04x\n", event->keyval); } //*/ // redraw _engine.do_S52draw = TRUE; return TRUE; }
void Processor::Img_pro() { _rotation(); imwrite("/storage/emulated/0/baidu/img.jpg",_img); Mat gray; cvtColor(_img, gray, CV_RGB2GRAY); Mat bin; adaptiveThreshold(gray, bin, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY_INV, 101, 1); imwrite("/storage/emulated/0/baidu/bin.jpg", bin); std::vector<std::vector<cv::Point> > contours; //des,contours,�ⲿ������������ findContours(bin, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); Mat des(_img.size(), CV_8UC1, Scalar(0)); for (int i = 0; i < contours.size(); i++) { if (contourArea(contours[i]) < 350) continue; drawContours(des, contours, i, Scalar(255), -1); } imwrite("/storage/emulated/0/baidu/des.jpg", des); Mat element = getStructuringElement(MORPH_RECT, Size(3,3)); dilate(des, des, element); contours.clear(); findContours(des, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); for (int i = 0; i < contours.size(); i++) { if (contourArea(contours[i]) < 350) continue; Mat sample(_img.size(), CV_8UC1, Scalar(0)); drawContours(sample, contours, i, Scalar(255), - 1); Mat regionOfInterest; Rect rec = boundingRect(contours[i]); Sample_Elem tmp; tmp.x_position = rec.x; tmp.y_position = rec.y; tmp.height = rec.height; tmp.weight = rec.width; if (rec.width < rec.height) { rec.x -= (rec.height - rec.width) / 2; if (rec.x < 0) rec.x = 0; if (rec.x + rec.height>sample.cols) rec.width = sample.cols - rec.x; else rec.width = rec.height; } else{ rec.y -= (rec.width - rec.height) / 2; if (rec.y < 0) rec.y = 0; if (rec.y + rec.width>sample.rows) rec.height = sample.rows - rec.y; else rec.height = rec.width; tmp.y_position = rec.y; tmp.height = rec.width; } /* FILE* fp; fp = fopen(".\\data\\sample_rect_data.txt", "a+"); if (fp == NULL) { std::cout << "rect error"; return; } fprintf(fp, "%d,%d,%d,%d\n", rec.x, rec.y, rec.width, rec.height); fclose(fp); */ regionOfInterest = sample(rec); resize(regionOfInterest, regionOfInterest, Size(SAMPLE_SIZE, SAMPLE_SIZE)); tmp.img = regionOfInterest; _Mat_contours.append(tmp); } }
Set<double> Cylindre::ensIntersect(const Ray &rayon) const { Set<double> res; double ox = rayon[0][0]; double oy = rayon[0][1]; double oz = rayon[0][2]; double dx = rayon[1][0]; double dy = rayon[1][1]; double dz = rayon[1][2]; double _a = _rotation(0, 0)*_rotation(0, 0) + _rotation(0, 1)*_rotation(0, 1); double _b = _rotation(1, 0)*_rotation(1, 0) + _rotation(1, 1)*_rotation(1, 1); double _c = _rotation(2, 0)*_rotation(2, 0) + _rotation(2, 1)*_rotation(2, 1); double _d = 2*(_rotation(0, 0)*_rotation(1, 0) + _rotation(0, 1)*_rotation(1, 1)); double _e = 2*(_rotation(0, 0)*_rotation(2, 0) + _rotation(0, 1)*_rotation(2, 1)); double _f = 2*(_rotation(1, 0)*_rotation(2, 0) + _rotation(1, 1)*_rotation(2, 1)); double _g = 2*(_rotation(0, 0)*_translation[0] + _rotation(0, 1)*_translation[1]); double _h = 2*(_rotation(1, 0)*_translation[0] + _rotation(1, 1)*_translation[1]); double _i = 2*(_rotation(2, 0)*_translation[0] + _rotation(2, 0)*_translation[1]); double _j = _translation[0]*_translation[0] + _translation[1]*_translation[1] -(_rayon * _rayon); double alpha = _a*dx*dx + _b*dy*dy + _c*dz*dz + 2*_d*dx*dy + 2*_e*dx*dz + 2*_f*dy*dz; double beta = 2*_a*ox*dx + 2*_b*oy*dy + 2*_c*oz*dz + 2*_d*(ox*dy + oy*dx) + 2*_e*(ox*dz + oz*dx) + 2*_f*(oy*dz + oz*dy) + _g*dx + _h*dy + _i*dz; double gamma = _a*ox*ox + _b*oy*oy + _c*oz*oz + 2*_d*ox*oy + 2*_e*ox*oz + 2*_f*oy*oz + _g*ox + _h*oy + _i* oz + _j; double delta = beta * beta - 4 * alpha * gamma; delta = sqrt(delta); if (delta == 0) { res.add(-beta / (2 * alpha)); } else if (delta > 0) { res.add((-beta - delta) / (2 * alpha)); res.add((-beta + delta) / (2 * alpha)); } return res; }