From 792fecff9ecda984d7bf8ed0f7780125a74a8ae1 Mon Sep 17 00:00:00 2001 From: catdog2 Date: Tue, 16 Dec 2008 21:59:25 +0000 Subject: [PATCH] variable zeitschritte: quadratische gleichung abschaetzung git-svn-id: http://svn.lsim.tuxzone.org/trunk@32 4bec179b-ab65-46ed-a5f8-55b8b5c735d0 --- lsim.kdevelop.pcs | Bin 201769 -> 171014 bytes lsim.kdevses | 58 +++++++++--------------------------- src/graphicsellipseitem.cpp | 45 +++++++++++++++++++++++++--- src/graphicsellipseitem.h | 11 +++++++ src/graphicsview.cpp | 6 ++++ src/graphicsview.h | 1 + src/lsim.cpp | 42 ++++++++++++++++++++++---- src/lsim.h | 1 + 8 files changed, 110 insertions(+), 54 deletions(-) diff --git a/lsim.kdevelop.pcs b/lsim.kdevelop.pcs index 322f3a98c7929ef89f25dc5190b9688721377ea0..a4d43f7315b340ac95ce07f1c17edd6364ed3822 100644 GIT binary patch delta 8237 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 Hk@LR+XP!GX delta 24557 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 RCSr8}!Wi{xv_dE2`G24`x={cC diff --git a/lsim.kdevses b/lsim.kdevses index 6156c28..3745896 100644 --- a/lsim.kdevses +++ b/lsim.kdevses @@ -1,61 +1,31 @@ - - - + + + - + - - + + - - + + - + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/graphicsellipseitem.cpp b/src/graphicsellipseitem.cpp index 03b3552..d0b0024 100644 --- a/src/graphicsellipseitem.cpp +++ b/src/graphicsellipseitem.cpp @@ -29,6 +29,7 @@ #include #include "constants.h" #include +#include GraphicsEllipseItem::GraphicsEllipseItem() { //setFlag(ItemIsMovable); @@ -51,6 +52,8 @@ void GraphicsEllipseItem::setupVars () { setStartSpeedX(0); setStartSpeedY(0); setPos(0,0); + setAdaptiveStepLength(0.01); + setAdaptiveStepControl(true); } void GraphicsEllipseItem::resetProbe() { @@ -120,9 +123,15 @@ void GraphicsEllipseItem::calculateProbePath(QPointF startPoint) { double powerX = myScene->getPowerAt(currProbePath->at(i-1), charge, speedListX->at(i-1),speedListY->at(i-1), 'x'); double powerY = myScene->getPowerAt(currProbePath->at(i-1), charge, speedListX->at(i-1),speedListY->at(i-1), 'y'); - if (combinedSpeed != 0) timePerStep = 0.008/(combinedSpeed/meterPerPx); - if (timePerStep < (1/10.0 * myScene->getTimePerStep())) timePerStep = 1/10.0 * myScene->getTimePerStep(); - if (timePerStep > (19.0/10.0 * myScene->getTimePerStep())) timePerStep = 19.0/10.0 * myScene->getTimePerStep(); + //automatische Zeitschrittanpassung 0.008 + if (isAdaptiveStepControlEnabled()&&combinedSpeed != 0) timePerStep = getAdaptiveStepLength()/(combinedSpeed/meterPerPx); + //if (timePerStep < (1/10.0 * myScene->getTimePerStep())) timePerStep = 1/10.0 * myScene->getTimePerStep(); + //if (timePerStep > (19.0/10.0 * myScene->getTimePerStep())) timePerStep = 19.0/10.0 * myScene->getTimePerStep(); + double combinedPower = sqrt(powerX*powerX+powerY*powerY); + if (isAdaptiveStepControlEnabled() && combinedPower !=0) { + timePerStep = fabs((-combinedSpeed + sqrt(combinedSpeed*combinedSpeed + 2*(combinedPower/myMasse)*getAdaptiveStepLength()*meterPerPx)) / (combinedPower/myMasse)); + } + //qDebug()<at(i-1).x() + deltaDistX/meterPerPx ,currProbePath->at(i-1).y() + deltaDistY/meterPerPx); + //Scrollbar int Probleme vermeiden + if (newPoint.x() + 10 > INT_MAX || newPoint.x() - 10 < INT_MIN) break; + if (newPoint.y() + 10 > INT_MAX || newPoint.y() - 10 < INT_MIN) break; + if (myScene->stopsHere(currProbePath->at(i-1),newPoint)) break; currProbePath->append(newPoint); @@ -192,7 +205,7 @@ void GraphicsEllipseItem::calculateProbePath(QPointF startPoint) { if (i%path_entry_step == 0 || i==currProbePath->count()) flightPath.lineTo(currProbePath->at(i)); } - //qDebug()<< "Probe Path: " <<*currProbePath; + qDebug()<< "Probe Path: " <<*currProbePath; //qDebug()<< "speed x: "<<*speedListX; //qDebug()<< "speed y: "<<*speedListY; //qDebug()<at(12); @@ -298,3 +311,27 @@ void GraphicsEllipseItem::setFlightPath ( const QPainterPath& theValue ) { + + +bool GraphicsEllipseItem::isAdaptiveStepControlEnabled() const { + return adaptiveStepControlEnabled; +} + + +void GraphicsEllipseItem::setAdaptiveStepControl ( bool theValue ) { + if (adaptiveStepControlEnabled == theValue) return; + adaptiveStepControlEnabled = theValue; + emit adaptiveStepControlChanged(theValue); +} + + +double GraphicsEllipseItem::getAdaptiveStepLength() const { + return adaptiveStepLength; +} + + +void GraphicsEllipseItem::setAdaptiveStepLength ( double theValue ) { + if (adaptiveStepLength == theValue) return; + adaptiveStepLength = theValue; + emit adaptiveStepLengthChanged(theValue); +} diff --git a/src/graphicsellipseitem.h b/src/graphicsellipseitem.h index ff35954..11670f4 100644 --- a/src/graphicsellipseitem.h +++ b/src/graphicsellipseitem.h @@ -52,6 +52,8 @@ class GraphicsEllipseItem : public QObject , public QGraphicsEllipseItem { QPainterPath getFlightPath() const; double getRealSimulTime() const; + bool isAdaptiveStepControlEnabled() const; + double getAdaptiveStepLength() const; protected: @@ -76,6 +78,10 @@ class GraphicsEllipseItem : public QObject , public QGraphicsEllipseItem { double startSpeedX; ///Startgeschwindigkeit des teilchens in y-Richtung double startSpeedY; + ///automatische Zeitschrittanpassung an/aus + bool adaptiveStepControlEnabled; + ///angenaeherte Schrittlaenge in px + double adaptiveStepLength; QPointF myScenePos; @@ -103,7 +109,10 @@ class GraphicsEllipseItem : public QObject , public QGraphicsEllipseItem { void setFlightPath ( const QPainterPath& theValue ); void resetProbe(); + void setAdaptiveStepControl ( bool theValue ); + void setAdaptiveStepLength ( double theValue ); + signals: void startSpeedXChanged(double speed); void startSpeedYChanged(double speed); @@ -112,6 +121,8 @@ class GraphicsEllipseItem : public QObject , public QGraphicsEllipseItem { void ScenePosChanged(QPointF newpos); void ScenePosXChanged(double newX); void ScenePosYChanged(double newY); + void adaptiveStepControlChanged(bool truefalse); + void adaptiveStepLengthChanged(double length); diff --git a/src/graphicsview.cpp b/src/graphicsview.cpp index 93c4641..285e8b4 100644 --- a/src/graphicsview.cpp +++ b/src/graphicsview.cpp @@ -101,6 +101,12 @@ void GraphicsView::disableOGLViewport() { //setViewport(new QWidget(parentWidget())); } +void GraphicsView::centerOnProbe() { + SimulScene* simulScene = dynamic_cast (scene()); + if (simulScene == 0) return; + centerOn(simulScene->getProbeChargeItem()); +} + GraphicsView::~GraphicsView() { } diff --git a/src/graphicsview.h b/src/graphicsview.h index 7714679..179fa73 100644 --- a/src/graphicsview.h +++ b/src/graphicsview.h @@ -38,6 +38,7 @@ class GraphicsView : public QGraphicsView { public slots: void enableOGLViewport(); void disableOGLViewport(); + void centerOnProbe(); private: QStatusBar * mainWindowStatusBar; diff --git a/src/lsim.cpp b/src/lsim.cpp index 2725852..dd9f8fc 100644 --- a/src/lsim.cpp +++ b/src/lsim.cpp @@ -102,14 +102,19 @@ void lsim::createActions() { acts.calculate->setStatusTip (tr ("Flugbahn berechnen")); connect (acts.calculate, SIGNAL (triggered()), this, SLOT (startCalculation())); - acts.resetAct = new QAction (tr ("reset"), this); - acts.resetAct->setStatusTip (tr ("reset")); + acts.resetAct = new QAction (tr ("Alles Zur\374cksetzen"), this); + acts.resetAct->setStatusTip (tr ("Alle Werte Zur\374cksetzen und alle Felder L\366schen")); connect (acts.resetAct, SIGNAL (triggered()), this, SLOT (resetAll())); acts.timerStart = new QAction (tr ("Timer Start"), this); acts.timerStart->setStatusTip (tr ("Timer starten")); connect (acts.timerStart, SIGNAL (triggered()), this, SLOT (startTimer())); + acts.centerOnProbeAct = new QAction (tr ("Ladungstr\344ger Zentrieren"), this); + acts.centerOnProbeAct->setStatusTip (tr ("Den Ladungstr\344ger Zentrieren")); + acts.centerOnProbeAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M)); + connect (acts.centerOnProbeAct, SIGNAL (triggered()), gview, SLOT (centerOnProbe())); + acts.timerStop = new QAction (tr ("Animation stoppen"), this); acts.timerStop->setStatusTip (tr ("Die Animation stoppen und Ladung an den Anfang zur\374cksetzen")); acts.timerStop->setIcon(QIcon(":icons/media-playback-stop.svg")); @@ -243,6 +248,8 @@ void lsim::createMenus() { viewMenu = menuBar()->addMenu(tr("&Ansicht")); + viewMenu->addAction(acts.centerOnProbeAct); + viewMenu->addSeparator(); viewMenu->addAction(acts.editModeAct); viewMenu->addAction(acts.simulationModeAct); viewMenu->addSeparator(); @@ -314,7 +321,7 @@ void lsim::initWindowMode(WindowMode newMode) { fieldItemEditDock->setVisible(true); probeItemDock->setVisible(true); sceneDock->setVisible(true); - gview->centerOn(simulscene->getProbeChargeItem()); + gview->centerOnProbe(); @@ -330,7 +337,7 @@ void lsim::initWindowMode(WindowMode newMode) { acts.itemEditModeAct->trigger(); simulscene->clearSelection(); acts.calculate->trigger(); - gview->centerOn(simulscene->getProbeChargeItem()); + gview->centerOnProbe(); } @@ -370,6 +377,24 @@ void lsim::createDocks() { connect(simulscene, SIGNAL(timePerStepChanged(double)),time_step_box, SLOT(setValue( double ))); + //automatische Schrittlaengen-box + ExpDoubleSpinBox *adaptive_step_length_box = new ExpDoubleSpinBox; + adaptive_step_length_box->setRange(pow(10,-100), pow(10,66)); + adaptive_step_length_box->setDecimals(100); + adaptive_step_length_box->setDisplayDecimals(3); + adaptive_step_length_box->setSuffix(" px"); + adaptive_step_length_box->setKeyboardTracking(false); + adaptive_step_length_box->setValue(simulscene->getProbeChargeItem()->getAdaptiveStepLength()); + connect(adaptive_step_length_box, SIGNAL(valueChanged(double)),simulscene->getProbeChargeItem(), SLOT(setAdaptiveStepLength(double))); + connect(simulscene->getProbeChargeItem(), SIGNAL(adaptiveStepLengthChanged(double)),adaptive_step_length_box, SLOT(setValue( double ))); + + //automatische schrittanpassungsbox + QCheckBox *adaptive_time_step_box = new QCheckBox(""); + adaptive_time_step_box->setChecked(simulscene->getProbeChargeItem()->isAdaptiveStepControlEnabled()); + connect(adaptive_time_step_box, SIGNAL(toggled(bool)),simulscene->getProbeChargeItem(), SLOT(setAdaptiveStepControl(bool))); + connect(simulscene->getProbeChargeItem(), SIGNAL(adaptiveStepControlChanged(bool)),adaptive_time_step_box, SLOT(setChecked(bool))); + connect(adaptive_time_step_box, SIGNAL(toggled(bool)),adaptive_step_length_box, SLOT(setEnabled(bool))); + //meterPerPixel Box ExpDoubleSpinBox *meter_per_px_box = new ExpDoubleSpinBox; meter_per_px_box->setRange(pow(10,-100), pow(10,66)); @@ -385,6 +410,7 @@ void lsim::createDocks() { QLabel *time_per_step_label = new QLabel(tr("Zeit pro Schritt:")); QLabel *steps_label = new QLabel(tr("Schritte:")); QLabel *meter_per_pixel_label = new QLabel(tr("Ein Pixel entspricht:")); + QLabel *adaptive_time_step_label = new QLabel(tr("Automatische Schrittl\344nge:")); //Scene settings Layout QGridLayout *sceneGridLayout = new QGridLayout; @@ -392,8 +418,12 @@ void lsim::createDocks() { sceneGridLayout->addWidget(steps_box,0,1); sceneGridLayout->addWidget(time_per_step_label,1,0,Qt::AlignRight); sceneGridLayout->addWidget(time_step_box,1,1); - sceneGridLayout->addWidget(meter_per_pixel_label,2,0,Qt::AlignRight); - sceneGridLayout->addWidget(meter_per_px_box,2,1); + sceneGridLayout->addWidget(adaptive_time_step_label,2,0,Qt::AlignRight); + sceneGridLayout->addWidget(adaptive_time_step_box,2,1); + sceneGridLayout->addWidget(adaptive_step_length_box,3,1); + sceneGridLayout->addWidget(meter_per_pixel_label,4,0,Qt::AlignRight); + sceneGridLayout->addWidget(meter_per_px_box,4,1); + QGroupBox *sceneGroupBox = new QGroupBox(tr("Allgemeines")); diff --git a/src/lsim.h b/src/lsim.h index 18958f2..d9966b1 100644 --- a/src/lsim.h +++ b/src/lsim.h @@ -122,6 +122,7 @@ class lsim: public QMainWindow { QAction *resetAct; QAction *fullScreenAct; + QAction *centerOnProbeAct; }; Actions acts;