From dc3d1dd8cbf3ec6dfbdfcfb600d026777bf93aad Mon Sep 17 00:00:00 2001 From: catdog2 Date: Sat, 18 Oct 2008 16:03:06 +0000 Subject: [PATCH] B-Feld Berechnung fertig, funktioniert aber scheinbar noch nicht richtig (richtung falsch, vllt auch anderes) git-svn-id: http://svn.lsim.tuxzone.org/trunk@9 4bec179b-ab65-46ed-a5f8-55b8b5c735d0 --- lsim.kdevelop.pcs | Bin 82951 -> 103930 bytes lsim.kdevses | 9 ++++++--- src/constants.h | 5 +++++ src/graphicsellipseitem.cpp | 8 ++++---- src/homobfieldwidget.cpp | 1 - src/simulscene.cpp | 32 +++++++++++++++++++++++++++----- src/simulscene.h | 9 ++++++--- 7 files changed, 48 insertions(+), 16 deletions(-) diff --git a/lsim.kdevelop.pcs b/lsim.kdevelop.pcs index 695cc1b6bf1674a92322fd29e579459a62619441..64a536041a18c3e4f3697bbce0c920ea3b919f80 100644 GIT binary patch delta 7970 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 delta 4005 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 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);