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
This commit is contained in:
catdog2
2008-10-18 16:03:06 +00:00
parent 4c6bb8e3f6
commit dc3d1dd8cb
7 changed files with 48 additions and 16 deletions

Binary file not shown.

View File

@@ -1,12 +1,12 @@
<?xml version = '1.0' encoding = 'UTF-8'?>
<!DOCTYPE KDevPrjSession>
<KDevPrjSession>
<DocsAndViews NumberOfDocuments="18" >
<DocsAndViews NumberOfDocuments="19" >
<Doc0 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/homoefielditem.cpp" >
<View0 Encoding="" Type="Source" />
</Doc0>
<Doc1 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/graphicsellipseitem.cpp" >
<View0 Encoding="" line="66" Type="Source" />
<View0 Encoding="" Type="Source" />
</Doc1>
<Doc2 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/graphicsellipseitem.h" >
<View0 Encoding="" Type="Source" />
@@ -54,8 +54,11 @@
<View0 Encoding="" Type="Source" />
</Doc16>
<Doc17 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/fielditem.cpp" >
<View0 Encoding="" line="30" Type="Source" />
<View0 Encoding="" line="48" Type="Source" />
</Doc17>
<Doc18 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/homobfieldwidget.cpp" >
<View0 Encoding="" line="86" Type="Source" />
</Doc18>
</DocsAndViews>
<pluginList>
<kdevdebugger>

View File

@@ -18,5 +18,10 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include <cmath>
//! Diese Datei definiert Konstanten
/**
@author Peter Dahlberg <pdahlberg@gmail.com>
*/
const double PI = acos( -1.0 );
const double SPEED_OF_LIGHT = 2.99792458e+8;

View File

@@ -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()<<speedListY->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');
}

View File

@@ -132,4 +132,3 @@ void HomoBFieldWidget::createWidget() {
HomoBFieldWidget::~HomoBFieldWidget() {
}

View File

@@ -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<HomoEFieldItem*> (items(point).at(i)) != 0) {
HomoEFieldItem* myHomoEfieldItem = qgraphicsitem_cast<HomoEFieldItem*> (items(point).at(i));
double power = (myHomoEfieldItem->getFieldPower() * charge);
double degAngle = myHomoEfieldItem->getRotation();
double radAngle = degAngle/180.0l*PI;
HomoEFieldItem* myHomoEFieldItem = qgraphicsitem_cast<HomoEFieldItem*> (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<HomoBFieldItem*> (items(point).at(i)) != 0) {
HomoBFieldItem* myHomoBFieldItem = qgraphicsitem_cast<HomoBFieldItem*>(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;

View File

@@ -49,10 +49,13 @@ class SimulScene : public QGraphicsScene {
/*!
\param point der Punkt der abgepr&uuml;ft werden soll
\param charge Die Ladung, auf die die Kraft ausge&uuml;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&uuml;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);