diff --git a/lsim.kdevelop.pcs b/lsim.kdevelop.pcs index 5b5de97..a70ecdc 100644 Binary files a/lsim.kdevelop.pcs and b/lsim.kdevelop.pcs differ diff --git a/lsim.kdevses b/lsim.kdevses index fc1be8b..af47d5e 100644 --- a/lsim.kdevses +++ b/lsim.kdevses @@ -3,22 +3,22 @@ - + - + - + - + - - + + - - + + diff --git a/src/lsim.cpp b/src/lsim.cpp index f9b0d31..308fc44 100644 --- a/src/lsim.cpp +++ b/src/lsim.cpp @@ -56,7 +56,7 @@ void lsim::closeEvent (QCloseEvent *event) { void lsim::about() { QMessageBox::about (this, tr ("\334ber lsim"), - tr ("Ein Proramm, dass noch fast gar nix kann usw...")); + tr ("Simulation von Bewegten Ladungen in elektrischen und magnetischen Feldern...")); } diff --git a/src/simulscene.cpp b/src/simulscene.cpp index 60ee700..7b76e52 100644 --- a/src/simulscene.cpp +++ b/src/simulscene.cpp @@ -40,7 +40,7 @@ SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) { //variablen initialisieren setTimePerStep(0.00001); - setSteps(21234); + setSteps(210000); //setMeterPerPx(1/1000.0); setMeterPerPx(1); @@ -586,7 +586,24 @@ void SimulScene::setTimePerStep(double time) { */ void SimulScene::startCalculation() { pathItem1->setPath(QPainterPath()); + + //Feld Item Listen erzeugen + calcEFieldList.clear(); + calcBFieldList.clear(); + for(int i = 0; i < items().size(); ++i) { + //HomoEFieldItems Abarbeiten + if (qgraphicsitem_cast (items().at(i)) != 0) { + calcEFieldList << qgraphicsitem_cast (items().at(i)); + } + //HomoBFieldItems Abarbeiten + if (qgraphicsitem_cast (items().at(i)) != 0) { + calcBFieldList << qgraphicsitem_cast(items().at(i)); + } + } + + //berechnung starten ellipse1->calculateProbePath(ellipse1->pos()); + pathItem1->setPath(ellipse1->getFlightPath()); //animationspfad berechnen @@ -626,7 +643,7 @@ void SimulScene::setSteps(int steps) { 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) { + /*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)); @@ -656,6 +673,48 @@ double SimulScene::getPowerAt(QPointF point, double charge, double speedX, doubl } //qDebug()<< PowerRadAngle; + if (xy == 'x') { + dPower += absLorentzPower * cos(PowerRadAngle); + } + if (xy == 'y') { + dPower += absLorentzPower * sin(PowerRadAngle); + } + } + }*/ + + for (int i=0; icontains(myHomoEFieldItem->mapFromScene(point))) { + + 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); + } + if(xy == 'y') { + if (degAngle != 90.0 && degAngle != 270.0) dPower += power * cos(radAngle); + } + } + } + for (int i=0; icontains(myHomoBFieldItem->mapFromScene(point))) { + 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); } diff --git a/src/simulscene.h b/src/simulscene.h index e234b19..9232be2 100644 --- a/src/simulscene.h +++ b/src/simulscene.h @@ -134,6 +134,10 @@ class SimulScene : public QGraphicsScene { qreal minHeight ); + QList calcEFieldList; + QList calcBFieldList; + + protected: void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent); void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent);