From 4add2d0631778f8c84afac3fb6784aa5fdb44948 Mon Sep 17 00:00:00 2001 From: catdog2 Date: Thu, 13 Nov 2008 15:17:17 +0000 Subject: [PATCH] Performance der Berechnung gesteigert git-svn-id: http://svn.lsim.tuxzone.org/trunk@14 4bec179b-ab65-46ed-a5f8-55b8b5c735d0 --- lsim.kdevelop.pcs | Bin 116147 -> 116147 bytes lsim.kdevses | 16 ++++++------ src/lsim.cpp | 2 +- src/simulscene.cpp | 63 +++++++++++++++++++++++++++++++++++++++++++-- src/simulscene.h | 4 +++ 5 files changed, 74 insertions(+), 11 deletions(-) diff --git a/lsim.kdevelop.pcs b/lsim.kdevelop.pcs index 5b5de9789e8430ca8849b86b76a14499960a6d62..a70ecdc4150f60b0b5d4c0b7ad31bc840ae5bfc5 100644 GIT binary patch delta 1797 zcmZ8gYfMx}6yEPH?lQESS7SksRW1-<0E!05kgF?rD_z}uGnH+m&dMY zYE`6l8RV#_XzBwWyj)W-38N8@vxa&3iy!#r0T=f#o)~)A5wP)}ypg!T2j7~? zhkKIvq@iWB!;Zy#R(ApmT8xj6(NBlw^S16hrb_09WYT&6_o@8ooji6)GFQfO7WN!u zCnS1GLqo$o9-vYe1nwn<4))f7)k?)N3FlLw6?6E_J`WSk>t8Q-EuYE*_sV#0|9;ji z(Ka)IJ035iDkk@SM$%tM`Vp$=gN>M}clmTEhPQp~VRxnIt5EWNwnd!K^Xe2eEfsZ( zqOIp3$;sfYF)P%h?U=4aL_8@>QM29Xvtf%?nPy!^BCY%gVfM_>E6FDARNp;{*$R#B z#@j5zU{N;4lH(BKXht30q%=+OL@NIHpW@d#BpEd-q~gA*NTi?_J?vYF|6<}!imDf7 zUwk6U)*Ga9Mkf!S#Vr0?NgO?_$29W$gy2IdI60QBvQl&-wn-8#V$}}gJsw;#g(g-Y zfhLt>h;5Smc6wHhzu96LW~#qezzUXX#8_z7O{7QX5lLwQbTMv_mLZco%l)-Zs`q0} zl%-gbL6ba1hc96cT?~lrK9FToOfqa7&Va-RP26c5aJUik$i7F^RjwKm<(er;BwrJ@ z8Rv9Xl8xGw8P~cX3Tr9c3@4536MvQsB7Ho)@>8_L7RgL)+uAv0nddZ(nh(H6{{48) zvZQFG>N|jU5W7mo?~BzcZ0&dwt3)5$YVejK^JjWHUgnm#=RbHHeRl}k*?fak7MVRb zsk90+6>EsQ2BuI+HCEVPD;d>>xcxJ%0;<&2p99cmKoQBMlzSL|QAQ1-DJO__wo8Ch zgzci(YBW-0HKN75-#&s&isC4yE)AG#0KFVu$8MRRt;q&{um*1CmAIEiYjBOW)rvoa zkD!71B;iwc)}j^6FJil}ePcan&&aJf$|a$#Gx*-6FKd@%T(T-&Q5GC)q(WQg=?XFK z( zS|80~I(}Y&85*dHT}6SpWV%az;|lCxIWo?nGj&)%r`tunibiDFX`66)>rfo&o7D(f z-->1G@@tq4woc?t6t+&?*^bNz{r;zm*iAP&a91CbSP^ceCAaV@|8c}gYpW4K-dmVV z4?5wdK&L3EbYaCfdHp7QY_rJHGB<0Po%&e2$u;f zppU;qKU*){XkqIqH;f?j2scichyDyB#0rJ`lCVO$d>h2dgc~EQj8=D}ift6GP1r{I bxm#4;AY85T2I6-_m@izda=x0~0}uWMc&Z1Z delta 1809 zcmZ8gdrX#97=M2+$j3oG6ob6%%gB+sXIp2F;T%GOtp6B`fe$Vrr^StNy zs$9M**NJxmT<-prhH+|%e0eBYb|c95cR-Qpa-ZI5;PHGaOF*peOi(&plg8E9xnqmO@?8ZzTLso+DH8ruxBVy7Tx_pZW&r7OXiLCT|HA8Bo4AdtwZwC{PFU7 z-*h=G_YUY$?7RteI=g6iDsp7C^+D2-g?yD5d z8r`Q*-}SyMpwcfWy%_DQ?5~Gt(26Dvzd)t!m@3Z=WQnty`b@4`I$oAu+%5YD%f&H` z`kVsk{xP0vguQopK0At~*F?3J?e)vl5pNEM$&N3wM89SReKWok={%z6YYi)A4w|0{ zHE%$Z;~?9^60PYOm}mwX!HW~EgiH(sVUub{QEiB(=XRk-+_v@REC=^k8=El2q1r7lV-i2tUZV*`D<LgcgTaXq|rkyC0H3^ z?9!yYWuEZ+RC@$d>2N7;_lj;i*QxBWhjUruUpu(R9&pc5%p_Mn_ccGXC1$H5iKc>M z*k;d(G`U}0G5fR54#8^bISvoqd6WNH9}tV~msh=o6X6?mQ+&N7e}Z-B9yQC`35Ya5Q&}cS6Ls)ru;M;@0ZAPzov2JXV`dUJu)e_o?Dp> zI4Sb9B9FQn&?fSAns4Paq8*}`a~Ip5kyEILlxezmYeM-+vTVr%>NDA&+2VH;2looC zP=2Og!54l4#hpYL?SBvbLXBJXPO-B0VTNdI<3l~>wDMoj0kKwV*3$8ha7R?=w8Cm{ z#UpT+>s@*THFTgEvuS@PLapMXh;xZ# zW=69m%VWdi$-iyI(u?hgx0Zf_DWL8SR_AtNVW8N~%86{->GTepYPK=_aKe6d9a8$d*Bu zx^Y;faVXf*=#5XAUC&`C+j>grL7mvaVFcR_`n?A}v5mvAY}=^qJV+FB7{*pe%X?8H h)XNEC+ekNhx$_1NRp$*PFL1h!L)CemmC%PQ{0r-%10MhY 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);