Performance der Berechnung gesteigert
git-svn-id: http://svn.lsim.tuxzone.org/trunk@14 4bec179b-ab65-46ed-a5f8-55b8b5c735d0
This commit is contained in:
Binary file not shown.
16
lsim.kdevses
16
lsim.kdevses
@@ -3,22 +3,22 @@
|
|||||||
<KDevPrjSession>
|
<KDevPrjSession>
|
||||||
<DocsAndViews NumberOfDocuments="6" >
|
<DocsAndViews NumberOfDocuments="6" >
|
||||||
<Doc0 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/simulscene.h" >
|
<Doc0 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/simulscene.h" >
|
||||||
<View0 Encoding="" line="85" Type="Source" />
|
<View0 Encoding="" line="90" Type="Source" />
|
||||||
</Doc0>
|
</Doc0>
|
||||||
<Doc1 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/simulscene.cpp" >
|
<Doc1 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/simulscene.cpp" >
|
||||||
<View0 Encoding="" line="42" Type="Source" />
|
<View0 Encoding="" line="691" Type="Source" />
|
||||||
</Doc1>
|
</Doc1>
|
||||||
<Doc2 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/graphicsellipseitem.h" >
|
<Doc2 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/graphicsellipseitem.h" >
|
||||||
<View0 Encoding="" line="51" Type="Source" />
|
<View0 Encoding="" line="22" Type="Source" />
|
||||||
</Doc2>
|
</Doc2>
|
||||||
<Doc3 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/graphicsellipseitem.cpp" >
|
<Doc3 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/graphicsellipseitem.cpp" >
|
||||||
<View0 Encoding="" line="130" Type="Source" />
|
<View0 Encoding="" line="205" Type="Source" />
|
||||||
</Doc3>
|
</Doc3>
|
||||||
<Doc4 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/homobfieldwidget.cpp" >
|
<Doc4 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/homobfielditem.cpp" >
|
||||||
<View0 Encoding="" line="39" Type="Source" />
|
<View0 Encoding="" line="57" Type="Source" />
|
||||||
</Doc4>
|
</Doc4>
|
||||||
<Doc5 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/homoefieldwidget.cpp" >
|
<Doc5 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/lsim.cpp" >
|
||||||
<View0 Encoding="" line="110" Type="Source" />
|
<View0 Encoding="" line="58" Type="Source" />
|
||||||
</Doc5>
|
</Doc5>
|
||||||
</DocsAndViews>
|
</DocsAndViews>
|
||||||
<pluginList>
|
<pluginList>
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ void lsim::closeEvent (QCloseEvent *event) {
|
|||||||
|
|
||||||
void lsim::about() {
|
void lsim::about() {
|
||||||
QMessageBox::about (this, tr ("\334ber lsim"),
|
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..."));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) {
|
SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) {
|
||||||
//variablen initialisieren
|
//variablen initialisieren
|
||||||
setTimePerStep(0.00001);
|
setTimePerStep(0.00001);
|
||||||
setSteps(21234);
|
setSteps(210000);
|
||||||
//setMeterPerPx(1/1000.0);
|
//setMeterPerPx(1/1000.0);
|
||||||
setMeterPerPx(1);
|
setMeterPerPx(1);
|
||||||
|
|
||||||
@@ -586,7 +586,24 @@ void SimulScene::setTimePerStep(double time) {
|
|||||||
*/
|
*/
|
||||||
void SimulScene::startCalculation() {
|
void SimulScene::startCalculation() {
|
||||||
pathItem1->setPath(QPainterPath());
|
pathItem1->setPath(QPainterPath());
|
||||||
|
|
||||||
|
//Feld Item Listen erzeugen
|
||||||
|
calcEFieldList.clear();
|
||||||
|
calcBFieldList.clear();
|
||||||
|
for(int i = 0; i < items().size(); ++i) {
|
||||||
|
//HomoEFieldItems Abarbeiten
|
||||||
|
if (qgraphicsitem_cast<HomoEFieldItem*> (items().at(i)) != 0) {
|
||||||
|
calcEFieldList << qgraphicsitem_cast<HomoEFieldItem*> (items().at(i));
|
||||||
|
}
|
||||||
|
//HomoBFieldItems Abarbeiten
|
||||||
|
if (qgraphicsitem_cast<HomoBFieldItem*> (items().at(i)) != 0) {
|
||||||
|
calcBFieldList << qgraphicsitem_cast<HomoBFieldItem*>(items().at(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//berechnung starten
|
||||||
ellipse1->calculateProbePath(ellipse1->pos());
|
ellipse1->calculateProbePath(ellipse1->pos());
|
||||||
|
|
||||||
pathItem1->setPath(ellipse1->getFlightPath());
|
pathItem1->setPath(ellipse1->getFlightPath());
|
||||||
|
|
||||||
//animationspfad berechnen
|
//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 SimulScene::getPowerAt(QPointF point, double charge, double speedX, double speedY, char xy) {
|
||||||
double dPower = 0;
|
double dPower = 0;
|
||||||
for(int i = 0; i < items(point).size(); ++i) {
|
/*for(int i = 0; i < items(point).size(); ++i) {
|
||||||
//HomoEFieldItems Abarbeiten
|
//HomoEFieldItems Abarbeiten
|
||||||
if (qgraphicsitem_cast<HomoEFieldItem*> (items(point).at(i)) != 0) {
|
if (qgraphicsitem_cast<HomoEFieldItem*> (items(point).at(i)) != 0) {
|
||||||
HomoEFieldItem* myHomoEFieldItem = qgraphicsitem_cast<HomoEFieldItem*> (items(point).at(i));
|
HomoEFieldItem* myHomoEFieldItem = qgraphicsitem_cast<HomoEFieldItem*> (items(point).at(i));
|
||||||
@@ -656,6 +673,48 @@ double SimulScene::getPowerAt(QPointF point, double charge, double speedX, doubl
|
|||||||
}
|
}
|
||||||
//qDebug()<< PowerRadAngle;
|
//qDebug()<< PowerRadAngle;
|
||||||
|
|
||||||
|
if (xy == 'x') {
|
||||||
|
dPower += absLorentzPower * cos(PowerRadAngle);
|
||||||
|
}
|
||||||
|
if (xy == 'y') {
|
||||||
|
dPower += absLorentzPower * sin(PowerRadAngle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
for (int i=0; i<calcEFieldList.size(); ++i) {
|
||||||
|
//HomoEFieldItems Abarbeiten
|
||||||
|
HomoEFieldItem* myHomoEFieldItem = calcEFieldList[i];
|
||||||
|
if (myHomoEFieldItem->contains(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; i<calcBFieldList.size(); ++i) {
|
||||||
|
//HomoBFieldItems Abarbeiten
|
||||||
|
HomoBFieldItem* myHomoBFieldItem = calcBFieldList[i];
|
||||||
|
if (myHomoBFieldItem->contains(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') {
|
if (xy == 'x') {
|
||||||
dPower += absLorentzPower * cos(PowerRadAngle);
|
dPower += absLorentzPower * cos(PowerRadAngle);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,6 +134,10 @@ class SimulScene : public QGraphicsScene {
|
|||||||
qreal minHeight
|
qreal minHeight
|
||||||
);
|
);
|
||||||
|
|
||||||
|
QList<HomoEFieldItem*> calcEFieldList;
|
||||||
|
QList<HomoBFieldItem*> calcBFieldList;
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent);
|
void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent);
|
||||||
void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent);
|
void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent);
|
||||||
|
|||||||
Reference in New Issue
Block a user