diff --git a/lsim.kdevelop.pcs b/lsim.kdevelop.pcs index 695cc1b..64a5360 100644 Binary files a/lsim.kdevelop.pcs and b/lsim.kdevelop.pcs differ diff --git a/lsim.kdevses b/lsim.kdevses index 344ba17..bc7c8dd 100644 --- a/lsim.kdevses +++ b/lsim.kdevses @@ -1,12 +1,12 @@ - + - + @@ -54,8 +54,11 @@ - + + + + diff --git a/src/constants.h b/src/constants.h index 8acc3e7..ccb3271 100644 --- a/src/constants.h +++ b/src/constants.h @@ -18,5 +18,10 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include +//! Diese Datei definiert Konstanten +/** + @author Peter Dahlberg +*/ + const double PI = acos( -1.0 ); const double SPEED_OF_LIGHT = 2.99792458e+8; \ No newline at end of file diff --git a/src/graphicsellipseitem.cpp b/src/graphicsellipseitem.cpp index 986d459..c6aca63 100644 --- a/src/graphicsellipseitem.cpp +++ b/src/graphicsellipseitem.cpp @@ -81,8 +81,8 @@ void GraphicsEllipseItem::calculateProbePath(QPointF startPoint, double startSpe for(int i = 1; i< steps;++i) { double myMasse = getMasse( sqrt( speedListX->at(i-1)*speedListX->at(i-1) + speedListY->at(i-1)*speedListY->at(i-1) ) ); //qDebug()<< myMasse; - double powerX = myScene->getPowerAt(currProbePath->at(i-1), charge, 'x'); - double powerY = myScene->getPowerAt(currProbePath->at(i-1), charge, 'y'); + 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'); double newspeedX = speedListX->at(i-1) + (powerX/myMasse * (timePerStep/1000.0)); double newspeedY = speedListY->at(i-1) + (powerY/myMasse * (timePerStep/1000.0)); @@ -110,8 +110,8 @@ void GraphicsEllipseItem::calculateProbePath(QPointF startPoint, double startSpe qDebug()<< "speed x: "<<*speedListX; qDebug()<< "speed y: "<<*speedListY; qDebug()<at(12); - qDebug()<<"power x: "<< (double)myScene->getPowerAt(QPointF(0,0), charge, 'x'); - qDebug()<<"power y: " << (double)myScene->getPowerAt(QPointF(0,0), charge, 'y'); + //qDebug()<<"power x: "<< (double)myScene->getPowerAt(QPointF(0,0), charge, 'x'); + //qDebug()<<"power y: " << (double)myScene->getPowerAt(QPointF(0,0), charge, 'y'); } diff --git a/src/homobfieldwidget.cpp b/src/homobfieldwidget.cpp index 123d212..766988b 100644 --- a/src/homobfieldwidget.cpp +++ b/src/homobfieldwidget.cpp @@ -132,4 +132,3 @@ void HomoBFieldWidget::createWidget() { HomoBFieldWidget::~HomoBFieldWidget() { } - diff --git a/src/simulscene.cpp b/src/simulscene.cpp index f93c9c1..9b6bf27 100644 --- a/src/simulscene.cpp +++ b/src/simulscene.cpp @@ -598,15 +598,15 @@ void SimulScene::setSteps(int steps) { } -double SimulScene::getPowerAt(QPointF point, double charge, char xy) { +double SimulScene::getPowerAt(QPointF point, double charge, double speedX, double speedY, char xy) { double dPower = 0; for(int i = 0; i < items(point).size(); ++i) { //HomoEFieldItems Abarbeiten if (qgraphicsitem_cast (items(point).at(i)) != 0) { - HomoEFieldItem* myHomoEfieldItem = qgraphicsitem_cast (items(point).at(i)); - double power = (myHomoEfieldItem->getFieldPower() * charge); - double degAngle = myHomoEfieldItem->getRotation(); - double radAngle = degAngle/180.0l*PI; + HomoEFieldItem* myHomoEFieldItem = qgraphicsitem_cast (items(point).at(i)); + double power = (myHomoEFieldItem->getFieldPower() * charge); + double degAngle = myHomoEFieldItem->getRotation(); + double radAngle = degAngle/180.0*PI; if(xy == 'x') { if (degAngle != 180.0) dPower += power * -sin(radAngle); @@ -615,6 +615,28 @@ double SimulScene::getPowerAt(QPointF point, double charge, char xy) { if (degAngle != 90.0 && degAngle != 270.0) dPower += power * cos(radAngle); } } + //HomoBFieldItems Abarbeiten + if (qgraphicsitem_cast (items(point).at(i)) != 0) { + HomoBFieldItem* myHomoBFieldItem = qgraphicsitem_cast(items(point).at(i)); + double absSpeed = sqrt(speedX * speedX + speedY * speedY); // Geschwindigkeit im Betrag |v|=sqrt(vx^2+vy^2) + double absLorentzPower = (charge * absSpeed * myHomoBFieldItem->getFluxDensity() ); //Kraft im Betrag: |F| = q*v*B + double speedRadAngle = atan2(speedY,speedX); //Winkel des Geschwindigkeitsvekors zur x-Achse im Bogenmass + + double PowerRadAngle; //Winkel des Lorentzkraftvektors zur x-Achse im Bogenmass + if (myHomoBFieldItem->getIsDirectionIntoPlane()) { + PowerRadAngle = speedRadAngle - PI/2.0; + } else { + PowerRadAngle = speedRadAngle + PI/2.0; + } + //qDebug()<< PowerRadAngle; + + if (xy == 'x') { + dPower += absLorentzPower * cos(PowerRadAngle); + } + if (xy == 'y') { + dPower += absLorentzPower * sin(PowerRadAngle); + } + } } return dPower; diff --git a/src/simulscene.h b/src/simulscene.h index 13ed994..646bd0f 100644 --- a/src/simulscene.h +++ b/src/simulscene.h @@ -49,10 +49,13 @@ class SimulScene : public QGraphicsScene { /*! \param point der Punkt der abgeprüft werden soll \param charge Die Ladung, auf die die Kraft ausgeübt wird - \param xy x oder y-Richtung + \param speedX Aktuelle Geschwindigkeit in x-Richtung + \param speedY Aktuelle Geschwindigkeit in y-Richtung + \param xy rückgabe in x oder y-Richtung */ - double getPowerAt(QPointF point, double charge, char xy); - QWidget* getProbeDockWidget() const; + double getPowerAt(QPointF point, double charge, double speedX, double speedY, char xy); + + QWidget* getProbeDockWidget() const; public slots: void setSceneMode(SceneMode mode);