void MainWindow::keyPressEvent(QKeyEvent *qkeyevent) //Tatstertur .............
{
    switch(qkeyevent->key())
    {
    case Qt::Key_Up:
        vor();
        break;
    case Qt::Key_Down:
        back();
        break;
    case Qt::Key_Right:
        rechts();
        break;
    case Qt::Key_Left:
        links();
        break;
    case Qt::Key_Space:
        stop();
        break;
    case Qt::Key_X:
        hoch();
        break;
    case Qt::Key_Y:
        runter();
        break;
    }
}
Beispiel #2
0
void CVT::compute_weighted_cvt(cv::Mat &  img, std::vector<cv::Point2d> & sites)
{
	//YH initialize
	int site_size = sites.size();
	this->cells.resize(site_size);
	for (int i = 0; i < site_size; i++)
	{
		this->cells[i].site = sites[i];
	}

	float max_dist_moved = FLT_MAX;


	//YH start VOR
	int iteration = 0;
	do
	{
		vor(img); //compute voronoi
		max_dist_moved = move_sites(img);
		if (debug) std::cout << "[" << iteration << "] max dist moved = " << max_dist_moved << std::endl;
		iteration++;
	} while (max_dist_moved>max_site_displacement && iteration < this->iteration_limit);

	if (debug) cv::waitKey();
}
QList<Vector2D> Voronoi_Diagram::calculate(QList<Vector2D> in_points)
{
    //consider some points
    std::vector<Point_2> points;
    for(int i=0;i<in_points.size();i++)
    {
        points.push_back(Point_2(in_points.at(i).x,in_points.at(i).y));
    }

    Delaunay_triangulation_2 dt2;
    //insert points into the triangulation
    dt2.insert(points.begin(),points.end());
    //construct a rectangle
    Iso_rectangle_2 bbox(Field::MinX,Field::MinY,Field::MaxX,Field::MaxY);
    Cropped_voronoi_from_delaunay vor(bbox);
    //extract the cropped Voronoi diagram
    dt2.draw_dual(vor);
    //print the cropped Voronoi diagram as segments
    std::stringstream ss;

    QList<Vector2D> out;
    wm->voronoi.clear();

    for(int i=0;i<vor.m_cropped_vd.size();i++)
    {
        Segment_2 tmp = vor.m_cropped_vd.at(i);
        Point_2 start = tmp.vertex(0) , end = tmp.vertex(1);
        Vector2D first(floor(start.x()),floor(start.y())) , second(floor(end.x()),floor(end.y()));

        if( !out.contains(first) )
        {
            if( wm->kn->IsInsideField(first) )
                 out.append(first);
        }

        if( !out.contains(second) )
        {
            if( wm->kn->IsInsideField(second) )
               out.append(second);
        }

        Segment2D seg(first,second);
        wm->voronoi.append(seg);
    }

    return out;
}
Beispiel #4
0
void test(){
    
    std::vector<Point_2> points;
    points.push_back(Point_2(0,0));
    points.push_back(Point_2(1,1));
    points.push_back(Point_2(0,1));
    
    DT dt2;
    //insert points into the triangulation
    dt2.insert(points.begin(),points.end());
    //construct a rectangle
    Iso_rectangle_2 bbox(-1,-1,2,2);
    Cropped_voronoi_from_delaunay vor(bbox);
    //extract the cropped Voronoi diagram
    dt2.draw_dual(vor);
    //print the cropped Voronoi diagram as segments
    
    
    std::copy(vor.m_cropped_vd.begin(),vor.m_cropped_vd.end(),
              std::ostream_iterator<Segment_2>(std::cout,"\n"));
    
}
Beispiel #5
0
void 
xop_s1 (
	__m128i	a1_1,
	__m128i	a1_2,
	__m128i	a2_1,
	__m128i	a2_2,
	__m128i	a3_1,
	__m128i	a3_2,
	__m128i	a4_1,
	__m128i	a4_2,
	__m128i	a5_1,
	__m128i	a5_2,
	__m128i	a6_1,
	__m128i	a6_2,
	__m128i	*out1,
	__m128i	*out2,
	__m128i	*out3,
	__m128i	*out4
) {
	__m128i a1=_mm_xor_si128 (a1_1, a1_2);
	__m128i a2=_mm_xor_si128 (a2_1, a2_2);
	__m128i a3=_mm_xor_si128 (a3_1, a3_2);
	__m128i a4=_mm_xor_si128 (a4_1, a4_2);
	__m128i a5=_mm_xor_si128 (a5_1, a5_2);
	__m128i a6=_mm_xor_si128 (a6_1, a6_2);
	__m128i ones = ONES;

	vtype x0F0F3333, x3C3C3C3C, x55FF55FF, x69C369C3, x0903B73F, x09FCB7C0,
	    x5CA9E295;
	vtype x55AFD1B7, x3C3C69C3, x6993B874;
	vtype x5CEDE59F, x09FCE295, x5D91A51E, x529E962D;
	vtype x29EEADC0, x4B8771A3, x428679F3, x6B68D433;
	vtype x5BA7E193, x026F12F3, x6B27C493, x94D83B6C;
	vtype x965E0B0F, x3327A113, x847F0A1F, xD6E19C32;
	vtype x0DBCE883, x3A25A215, x37994A96;
	vtype xC9C93B62, x89490F02, xB96C2D16;
	vtype x0, x1, x2, x3;

	vsel(x0F0F3333, a3, a2, a5);
	vxor(x3C3C3C3C, a2, a3);
	vor(x55FF55FF, a1, a4);
	vxor(x69C369C3, x3C3C3C3C, x55FF55FF);
	vsel(x0903B73F, a5, x0F0F3333, x69C369C3);
	vxor(x09FCB7C0, a4, x0903B73F);
	vxor(x5CA9E295, a1, x09FCB7C0);

	vsel(x55AFD1B7, x5CA9E295, x55FF55FF, x0F0F3333);
	vsel(x3C3C69C3, x3C3C3C3C, x69C369C3, a5);
	vxor(x6993B874, x55AFD1B7, x3C3C69C3);

	vsel(x5CEDE59F, x55FF55FF, x5CA9E295, x6993B874);
	vsel(x09FCE295, x09FCB7C0, x5CA9E295, a5);
	vsel(x5D91A51E, x5CEDE59F, x6993B874, x09FCE295);
	vxor(x529E962D, x0F0F3333, x5D91A51E);

	vsel(x29EEADC0, x69C369C3, x09FCB7C0, x5CEDE59F);
	vsel(x4B8771A3, x0F0F3333, x69C369C3, x5CA9E295);
	vsel(x428679F3, a5, x4B8771A3, x529E962D);
	vxor(x6B68D433, x29EEADC0, x428679F3);

	vsel(x5BA7E193, x5CA9E295, x4B8771A3, a3);
	vsel(x026F12F3, a4, x0F0F3333, x529E962D);
	vsel(x6B27C493, x6B68D433, x5BA7E193, x026F12F3);
	vnot(x94D83B6C, x6B27C493);
	vsel(x0, x94D83B6C, x6B68D433, a6);
	vxor(*out1, *out1, x0);

	vsel(x965E0B0F, x94D83B6C, a3, x428679F3);
	vsel(x3327A113, x5BA7E193, a2, x69C369C3);
	vsel(x847F0A1F, x965E0B0F, a4, x3327A113);
	vxor(xD6E19C32, x529E962D, x847F0A1F);
	vsel(x1, xD6E19C32, x5CA9E295, a6);
	vxor(*out2, *out2, x1);

	vsel(x0DBCE883, x09FCE295, x3C3C69C3, x847F0A1F);
	vsel(x3A25A215, x3327A113, x5CA9E295, x0903B73F);
	vxor(x37994A96, x0DBCE883, x3A25A215);
	vsel(x3, x37994A96, x529E962D, a6);
	vxor(*out4, *out4, x3);

	vsel(xC9C93B62, x94D83B6C, x69C369C3, x5D91A51E);
	vsel(x89490F02, a3, xC9C93B62, x965E0B0F);
	vsel(xB96C2D16, x89490F02, x3C3C3C3C, x3A25A215);
	vsel(x2, xB96C2D16, x6993B874, a6);
	vxor(*out3, *out3, x2);


}
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //IPS Stationen Arduino-Simulation
    /*ui->s1x->setValue(1000);ui->s1y->setValue(1000);ui->s1z->setValue(0);
    ui->s2x->setValue(2000);ui->s2y->setValue(1000);ui->s2z->setValue(0);
    ui->s3x->setValue(2000);ui->s3y->setValue(0000);ui->s3z->setValue(1000);
    ui->s4x->setValue(1000);ui->s4y->setValue(0000);ui->s4z->setValue(0);
    ui->s5x->setValue(0000);ui->s5y->setValue(0000);ui->s5z->setValue(1000);
    ui->s6x->setValue(0000);ui->s6y->setValue(1000);ui->s6z->setValue(0);
    ui->s7x->setValue(0000);ui->s7y->setValue(2000);ui->s7z->setValue(1000);
    ui->s8x->setValue(1000);ui->s8y->setValue(2000);ui->s8z->setValue(0);
    ui->s9x->setValue(2000);ui->s9y->setValue(2000);ui->s9z->setValue(1000);*/
    //Ende IPS Stationen;

    //Karte erstellen
    map = new QGraphicsScene(this);
    ui->graphicsView->setScene(map);
    ui->graphicsView->scale(0.1,0.1);  //zoomen der Karte so ist platz für 7,5 meter

    // GUI Einstellunegn
    setWindowTitle(tr("Zentrale - Sturzflug@daedalus"));

    //PortBox ComPort Einstellungen
    //COM Ports suchen
    foreach (QextPortInfo info, QextSerialEnumerator::getPorts())
        ui->XbeeportBox->addItem(info.portName);
    foreach (QextPortInfo info, QextSerialEnumerator::getPorts())
        ui->IPSportBox->addItem(info.portName);

    //selber eintargen Möglich machen
    ui->XbeeportBox->setEditable(true);
    ui->IPSportBox->setEditable(true);
    //Port Box STOP

    //BaudRateBox kompatible Werte mit Win und Linux
    ui->XbeeBaudRateBox->addItem("1200", BAUD1200);
    ui->XbeeBaudRateBox->addItem("2400", BAUD2400);
    ui->XbeeBaudRateBox->addItem("4800", BAUD4800);
    ui->XbeeBaudRateBox->addItem("9600", BAUD9600);
    ui->XbeeBaudRateBox->addItem("19200", BAUD19200);
    ui->XbeeBaudRateBox->addItem("115200", BAUD115200);
    ui->XbeeBaudRateBox->setCurrentIndex(3); //Vorsicht nur Ändern wenn auch PorSettings geändert
    ui->IPSBaudRateBox->addItem("115200", BAUD115200); //IPS nur mit dieser BaudRate
    ui->IPSBaudRateBox->setCurrentIndex(0); //Vorsicht nur Ändern wenn auch PorSettings geändert
    // BaudRateBox STOP

    //ComText Box
    ui->XbeeComText->setReadOnly(true);
    ui->IPSComText->setReadOnly(true);
    //ComText Box STOP

    Xbeetimer = new QTimer(this);
    Xbeetimer->setInterval(80);
    IPStimer = new QTimer(this);
    IPStimer->setInterval(155); //könnte probleme lösen

    Refreshtimer = new QTimer(this);
    Refreshtimer->setInterval(ui->refreshTime->value()); //Aktuallisierungsrate aus der GUI in ms

    //Vordefinierte Einstelluneg
    PortSettings Xbeesettings = {BAUD9600, DATA_8, PAR_NONE, STOP_1, FLOW_OFF, 10};
    Xbeeport = new QextSerialPort(ui->XbeeportBox->currentText(), Xbeesettings, QextSerialPort::Polling);
    PortSettings IPSsettings = {BAUD115200, DATA_8, PAR_NONE, STOP_1, FLOW_OFF, 10};
    IPSport = new QextSerialPort(ui->IPSportBox->currentText(), IPSsettings, QextSerialPort::Polling);
    //Vordefinierte Einstellungen STOP

    //Connectoren -----------------------------------------------------------------------------------------------------

    //globale Connectoren
    //connect(ui->TestButton, SIGNAL(clicked()), SLOT(onTestButtonClicked()));
    connect(ui->reset_imu, SIGNAL(clicked()), SLOT(onreset_imuClicked()));


    //Xbee connectoren
    connect(ui->XbeeBaudRateBox, SIGNAL(currentIndexChanged(int)), SLOT(XbeeonBaudRateChanged(int)));
    connect(ui->XbeeportBox, SIGNAL(editTextChanged(QString)), SLOT(XbeeonPortNameChanged(QString)));
    connect(Xbeetimer, SIGNAL(timeout()), SLOT(XbeeonReadyRead()));
    connect(Xbeeport, SIGNAL(readyRead()), SLOT(XbeeonReadyRead()));

    //IPS connectoren
    connect(ui->IPSBaudRateBox, SIGNAL(currentIndexChanged(int)), SLOT(IPSonBaudRateChanged(int)));
    connect(ui->IPSportBox, SIGNAL(editTextChanged(QString)), SLOT(IPSonPortNameChanged(QString)));
    connect(IPStimer, SIGNAL(timeout()), SLOT(IPSonReadyRead()));
    connect(IPSport, SIGNAL(readyRead()), SLOT(IPSonReadyRead()));
    connect(ui->posStationSetzen, SIGNAL(clicked()), SLOT(setPosStation()));

    //refresh connector ZENTRALES Takt-Element
    connect(Refreshtimer, SIGNAL(timeout()), SLOT(refresh()));
    connect(ui->setRefresh, SIGNAL(clicked()), SLOT(setrefreshrate()));

    // Karte
    connect(ui->deletkoordinaten, SIGNAL(clicked()), SLOT(deletekoordinaten()));

    //Einstellungen
    connect(ui->setAbweichung, SIGNAL(clicked()), SLOT(setAbweichung()));
    connect(ui->setZiel, SIGNAL(clicked()), SLOT(setZiel()));
    connect(ui->setZieltolleranz, SIGNAL(clicked()), SLOT(setZieltolleranz()));
    connect(ui->setHoehe, SIGNAL(clicked()), SLOT(setHoehe()));
    connect(ui->setFilter, SIGNAL(clicked()), SLOT(setFilter()));
    connect(ui->setHindernisse, SIGNAL(clicked()), SLOT(setHindernisse()));
    connect(ui->setSchub, SIGNAL(clicked()), SLOT(setRueckschub()));
    connect(ui->ultraschall, SIGNAL(stateChanged(int)), SLOT(setUltraschall()));

    //Handsteuerung

    connect(ui->Handsteuerung, SIGNAL(stateChanged(int)), SLOT(setHandsteuerung()));

    connect(ui->vor, SIGNAL(clicked()), SLOT(vor()));
    connect(ui->back, SIGNAL(clicked()), SLOT(back()));
    connect(ui->links, SIGNAL(clicked()), SLOT(links()));
    connect(ui->rechts, SIGNAL(clicked()), SLOT(rechts()));
    connect(ui->stop, SIGNAL(clicked()), SLOT(stop()));
    connect(ui->hoch, SIGNAL(clicked()), SLOT(hoch()));
    connect(ui->runter, SIGNAL(clicked()), SLOT(runter()));
    connect(ui->abwurf, SIGNAL(clicked()), SLOT(abwurf()));

    //ENDE Connectoren ------------------------------------------------------------------------------------------------

    setup();


}