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:
Binary file not shown.
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
@@ -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');
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -132,4 +132,3 @@ void HomoBFieldWidget::createWidget() {
|
||||
HomoBFieldWidget::~HomoBFieldWidget() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user