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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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);
	}
}
Ejemplo n.º 4
0
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;
}