From 75632cdbbca4087f4232bb3cc2ce76b37830f53f Mon Sep 17 00:00:00 2001 From: catdog2 Date: Wed, 12 Nov 2008 21:50:47 +0000 Subject: [PATCH] animationsberechnung bei grossen steps beschleunigt, usw. git-svn-id: http://svn.lsim.tuxzone.org/trunk@13 4bec179b-ab65-46ed-a5f8-55b8b5c735d0 --- lsim.kdevelop.pcs | Bin 179138 -> 116147 bytes lsim.kdevses | 14 +- lsim.tag | 306 ++++++++++++++++++++++++++++++++++-- src/graphicsellipseitem.cpp | 20 ++- src/homobfielditem.cpp | 3 +- src/simulscene.cpp | 34 ++-- src/simulscene.h | 3 +- 7 files changed, 340 insertions(+), 40 deletions(-) diff --git a/lsim.kdevelop.pcs b/lsim.kdevelop.pcs index bede53632fdb58eb9c782bc59f75cf1f4c293873..5b5de9789e8430ca8849b86b76a14499960a6d62 100644 GIT binary patch delta 2480 zcmYjT4N%nA5r2Ea-TwjSae#c4PqkHI6%A3eG@{hVfe31Z#1!laLXdz!gzzE4C8mNR z0eQ+stdxkFL<%a0`Abj&scrKy723w>N16)lOq$lt1kz4BnY7Y-M4Sw zzW3+d|9Cl@O@53qBiqKl$DSlfYQf@HTjE5&d4Xp8^3EE@v}%l81aV?KVu_aG?-j|I zB?ZT#AWKW}dF&ix3(t!a>(a!2Fv0T_Y7--1G$daW-DP$yC1iFHV|$N^i6hxsO7QS% z#tu8giK{y_TW#j!jP=!t2~!-}v%y!y&a)Z@u8QbiQeyMZw=#A;Nkqpdh|#q{u9V|j zWE~0O%1Eei-1DT|pG-6Mw=RlE77broG~2&74>LA>10e>IaWWjd#6*Ip@bxr77-gb0 z|1~wmz{gMKdBzEj9W;4O$anJ=HVx9R`p8SAt2J z?ON5x3^HG*O~v744#a3F0f}EQ*tJiTnRXlOI_)XL6zbc;VBfFt#Ue=6X6eVEfe$J5rp)BDIE=u5rcAfdcRd6Ni{psMITtKWSJ|C$ zFJ0x+Wna=Z+xtA;loBwLJ)#fDVb&Ik;zrG%&wbi1}I>sTyq zzrT%o=cgwgfiy7hRvvl80aNQ?70xz+Q6F!Fod%vs)_FwRFufj@Re^bRC7ZZb(=-Ud%c{!O3 zM74OK6=rxPi3^A-@yBg2gcBp+;VJbB+;al@%m)-K`C_!5f<%0#9m??fDe!?MZbP7e zYV!-qQSxPO`yT`p^D1Sp!if@GbN zFT(O3h?VDki`SEGBKqN6i^KGOgkl4)Q%IeNc*QjXUvE@S6+DJrosh~mDz}X|(+NX7 zO{r<(_8)`L(Fc#<=hd)2W(_M~#cUsYmKCxJdW84T-$Ir}mIFk&L=vrFH5lFt-*=sy zEGtutrK4D39h4Nd05%0N^tBz!! zhdSO&sI0hIpE?iofbUfLPSN)2*LSe=B8>2(3OuTRei5R9Hz~bIl&uQVY0l>ZKc;NQ zuVAdg{JG}m*{iEw<~=+zSs+g=B}Fe!wwgtwGT4z(i!j(x6G zHi^;(4JZ2{mnSLLB%HO-Mrhq{Vbf(8UF2lR+I$IA@k0bD2f*RXB42;_*`_+%PXET~55@7MXP=-W>#Q@WXq9 zP|BB**+rOl4PJMt@zR9;Zz)y&hp-fX`WBqwF(g`vV(?iV4)f;!CG zP(nTdM3P6iKGoDDyxR`nFsVCRe!;m}*yI(UzW9Jyy&GH1KUGlBc9xl$W G3I9I>tG8kR literal 179138 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 diff --git a/lsim.kdevses b/lsim.kdevses index 2e62509..fc1be8b 100644 --- a/lsim.kdevses +++ b/lsim.kdevses @@ -1,19 +1,25 @@ - + - + - + - + + + + + + + diff --git a/lsim.tag b/lsim.tag index 7a3f672..096d24e 100644 --- a/lsim.tag +++ b/lsim.tag @@ -252,6 +252,26 @@ [] + + moc_graphicsellipseitem.cpp + /mnt/sdb1/c++/lsim/src/ + moc__graphicsellipseitem_8cpp + graphicsellipseitem.h + + static QT_BEGIN_MOC_NAMESPACE const uint + qt_meta_data_GraphicsEllipseItem + moc__graphicsellipseitem_8cpp.html + 7a420d39c97f6c6a807b8b13097760c2 + [] + + + static const char + qt_meta_stringdata_GraphicsEllipseItem + moc__graphicsellipseitem_8cpp.html + ec943eb354cf5c270edb9ae531f4bcf6 + [] + + moc_graphicsview.cpp /mnt/sdb1/c++/lsim/src/ @@ -570,6 +590,20 @@ 72fd535bd8226c8d6957c61f8b540533 () const + + void + setDisplayDecimals + classExpDoubleSpinBox.html + 8db051482a63d8a8ca78d230e93f7880 + (int theValue) + + + int + getDisplayDecimals + classExpDoubleSpinBox.html + 43ab08ed497441e3ea23b96e4ad9e1a6 + () const + virtual QDoubleSpinBox::StepEnabled stepEnabled @@ -591,6 +625,13 @@ b5b74897fb840c451265e2aac1f2fbd4 + + int + displayDecimals + classExpDoubleSpinBox.html + afad6f01498806cbb460d729eec53faf + + FieldItem @@ -763,6 +804,13 @@ 4642adc434298f0fc0c9f5e9e75666ed (QGraphicsItem *item) + + virtual void + wheelEvent + classFieldItem.html + 10c79fa0b47e07e35e276e85d58e0878 + (QGraphicsSceneWheelEvent *event) + QPointF myScenePos @@ -792,8 +840,8 @@ void calculateProbePath classGraphicsEllipseItem.html - 2cdad5fc83d96af73ae8c136b53e5fe1 - (QPointF startPoint=QPointF(0, 0), double startSpeedX=0, double startSpeedY=0) + 6a2deb321fc5196c441a8f8b89b43fb4 + (QPointF startPoint=QPointF(0, 0)) void @@ -802,26 +850,103 @@ 7230ec257dd669949e9d3ada7a51923a (const double &theValue) - - double - getMasse - classGraphicsEllipseItem.html - edd61d768890e05097cac9285ff63aba - (double speed) - void setCharge classGraphicsEllipseItem.html - fb65dbef1a6c2a46d43957655e6c3942 - (const long double &theValue) + 1d5b324628b73a3da5b0c864cf8630a5 + (const double &theValue) - long double - getCharge + void + setStartSpeedX classGraphicsEllipseItem.html - 1f873b91eb795f77342cba8430bc0dd5 - () const + 3a90229a6cd448ad8c2ecc1c173c214a + (double theValue) + + + void + setStartSpeedY + classGraphicsEllipseItem.html + 776b2265625e4ef50afad2f5d3e9b9a7 + (double theValue) + + + void + setScenePosY + classGraphicsEllipseItem.html + 2076f345c5b2841953809e665e22ceb5 + (double newPosY) + + + void + setScenePosX + classGraphicsEllipseItem.html + 3ffee0531e48adc8f9d9fef0db79473d + (double newPosX) + + + void + handleSceneChange + classGraphicsEllipseItem.html + cc5753c7193a85cb7e3fc69aeed7df11 + (const QList< QRectF > &) + + + void + setFlightPath + classGraphicsEllipseItem.html + e8c50bea63a7e0a4e4cb80cab277906b + (const QPainterPath &theValue) + + + void + startSpeedXChanged + classGraphicsEllipseItem.html + 84901ac57b2171f9a0df5a0863332fe3 + (double speed) + + + void + startSpeedYChanged + classGraphicsEllipseItem.html + 772b99820f776f62156f5caf8af22b2e + (double speed) + + + void + masseChanged + classGraphicsEllipseItem.html + b2fe738f18ee90d63d09b575c356dadb + (double masse) + + + void + chargeChanged + classGraphicsEllipseItem.html + 7a6cb698db7b4bed7386df3d9f60b6fb + (double Charge) + + + void + ScenePosChanged + classGraphicsEllipseItem.html + 754ecb303588efafc1bc6e17e701358c + (QPointF newpos) + + + void + ScenePosXChanged + classGraphicsEllipseItem.html + abcdcc33150b34498a7b8da26d044c5b + (double newX) + + + void + ScenePosYChanged + classGraphicsEllipseItem.html + 5aeccf41db0391d25f2da1357986c479 + (double newY) @@ -851,6 +976,41 @@ 130f0b45e6fe641c29928e51b468418b () + + double + getCharge + classGraphicsEllipseItem.html + 201122c3425a9cd56b9213d6968bd3f6 + () const + + + double + getStartSpeedX + classGraphicsEllipseItem.html + 9f04be533240195d2dc87244262f1808 + () const + + + double + getStartSpeedY + classGraphicsEllipseItem.html + e2fff1f0c10a454b6f9b7695d1ee4b39 + () const + + + double + getMasse + classGraphicsEllipseItem.html + edd61d768890e05097cac9285ff63aba + (double speed) + + + QPainterPath + getFlightPath + classGraphicsEllipseItem.html + 2e652c4e80a854b57ae6fc765ed77920 + () const + void mousePressEvent @@ -907,6 +1067,34 @@ afa81f63289aa4d4624f38015b37d643 + + double + startSpeedX + classGraphicsEllipseItem.html + 72602152d2a445aad22958cc816f1308 + + + + double + startSpeedY + classGraphicsEllipseItem.html + 2aab36c74f1e052f672ef50a5fcab2a4 + + + + QPointF + myScenePos + classGraphicsEllipseItem.html + 032ca02363fb03fd2a778ea109133250 + + + + QPainterPath + flightPath + classGraphicsEllipseItem.html + e498c2f89012d31c2c12f3a4c6e9154e + + GraphicsView @@ -983,6 +1171,13 @@ 6a5ecd467c67a3a358bfe853dd19335f (bool theValue) + + void + setFluxDensity + classHomoBFieldItem.html + 5fc3191fef621a3c3d3e239f338ae347 + (double theValue) + void directionChanged @@ -990,6 +1185,13 @@ 432f975078b7fddcf1e2a470491d8e10 (bool theValue) + + void + fluxDensityChanged + classHomoBFieldItem.html + 911669c9afda72705b801ab2d4745163 + (double theValue) + HomoBFieldItem @@ -1060,6 +1262,20 @@ efb3cf5f1132b110f698519878afdc76 () const + + double + getFluxDensity + classHomoBFieldItem.html + 7310d5af24b8a1f1955db694f3638fe6 + () const + + + void + wheelEvent + classHomoBFieldItem.html + 0a75d5844cf88d92d3ec8a09434d798e + (QGraphicsSceneWheelEvent *event) + int fieldLineDistance @@ -1088,6 +1304,13 @@ 35bec97190b75fa64b7876533c4ef8a5 + + double + fluxDensity + classHomoBFieldItem.html + caf386ad7e2013f9a9ee32df346da659 + + HomoBFieldWidget @@ -1513,6 +1736,13 @@ 9546761515a2022d7a29c570fd6fa1d6 + + QAction * + timerStop + structlsim_1_1Actions.html + e21383d2adcb3d34d4b631b7b130da53 + + QAction * itemEditModeAct @@ -1620,6 +1850,13 @@ b3adfc8c3b2313c9c80414e0ac3ba6b2 () + + void + stopTimer + classSimulScene.html + e586360d85b6eea44cb7def1a2b3ab8a + () + void deleteSelectedFieldItems @@ -1662,6 +1899,13 @@ 501a15eebf6fdb98bff8984a370c3197 () const + + void + setFlightPathVisible + classSimulScene.html + e5957131232c8d3139975f909f49b43c + (bool visible=true) + void sceneModeChanged @@ -1690,6 +1934,13 @@ e2a1abff3b5f2b7f1fdc7d97d39a7e41 (double meterPerPx) + + void + flightPathVisibilityChanged + classSimulScene.html + 8cb739462a0a96f444f046187e3f09c3 + (bool visible) + SimulScene @@ -1729,8 +1980,8 @@ double getPowerAt classSimulScene.html - 31ffa4052da42a3b5b193e9dde0e1e1c - (QPointF point, double charge, char xy) + a50c6c3080a5103b0c404a8eb903fdfc + (QPointF point, double charge, double speedX, double speedY, char xy) QWidget * @@ -1739,6 +1990,13 @@ db0106ca0245b674a71c50c93e901df3 () const + + bool + getFlightPathShouldBeVisible + classSimulScene.html + c54f4ebbd92179d82efe817fe3a6060d + () const + void mousePressEvent @@ -1802,6 +2060,13 @@ cc0c5530431faa20ed6334ff621b7f19 + + bool + flightPathShouldBeVisible + classSimulScene.html + 47000919efbe8cd348cdaffdbd35fabe + + SceneMode myMode @@ -1879,6 +2144,13 @@ fbc2ba594bd06cb4581d4c649ddf9efb + + QGraphicsPathItem * + pathItem1 + classSimulScene.html + fad34d48dea97fe1050a503fa07c2c97 + + resizeRects reRects diff --git a/src/graphicsellipseitem.cpp b/src/graphicsellipseitem.cpp index 66663ae..91ddbe2 100644 --- a/src/graphicsellipseitem.cpp +++ b/src/graphicsellipseitem.cpp @@ -94,12 +94,16 @@ void GraphicsEllipseItem::calculateProbePath(QPointF startPoint) { //startpunkt in den Pfad setzen flightPath = QPainterPath(startPoint); - + int debugTime = 0; + time_t start_time = time(0); 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; + time_t timeb = time(0); 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'); + time_t timea = time(0); + debugTime += difftime(timea,timeb); double newspeedX = speedListX->at(i-1) + (powerX/myMasse * (timePerStep/1000.0)); double newspeedY = speedListY->at(i-1) + (powerY/myMasse * (timePerStep/1000.0)); @@ -121,15 +125,17 @@ void GraphicsEllipseItem::calculateProbePath(QPointF startPoint) { currProbePath->append(newPoint); speedListX->append(newspeedX); speedListY->append(newspeedY); - /*if(i%10 == 0)*/ flightPath.lineTo(newPoint); + flightPath.lineTo(newPoint); } + qDebug()<< difftime(time(0),start_time); + qDebug()<< debugTime; - qDebug()<< "Probe Path: " <<*currProbePath; - qDebug()<< "speed x: "<<*speedListX; - qDebug()<< "speed y: "<<*speedListY; - qDebug()<at(12); + //qDebug()<< "Probe Path: " <<*currProbePath; + //qDebug()<< "speed x: "<<*speedListX; + //qDebug()<< "speed y: "<<*speedListY; + //qDebug()<at(12); //qDebug()<<"power x: "<< (double)myScene->getPowerAt(QPointF(0,0), charge, 'x'); //qDebug()<<"power y: " << (double)myScene->getPowerAt(QPointF(0,0), charge, 'y'); @@ -137,7 +143,7 @@ void GraphicsEllipseItem::calculateProbePath(QPointF startPoint) { double GraphicsEllipseItem::getMasse(double speed) { - if(speed == 0) return masse; + if(speed < SPEED_OF_LIGHT/10.0) return masse; else { return masse / (sqrt(1- ( (speed/SPEED_OF_LIGHT)*(speed/SPEED_OF_LIGHT)))); diff --git a/src/homobfielditem.cpp b/src/homobfielditem.cpp index 87d11cf..d87a082 100644 --- a/src/homobfielditem.cpp +++ b/src/homobfielditem.cpp @@ -54,7 +54,8 @@ QRectF HomoBFieldItem::getRectF() const } void HomoBFieldItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { - Qt::GlobalColor linecolor = Qt::red; + //Qt::GlobalColor linecolor = Qt::red; + QColor linecolor(92,105,118); painter->setPen(linecolor); if (isSelected()) painter->setBrush(Qt::Dense6Pattern); //selection deutlich machen painter->drawRect(sizeRect); diff --git a/src/simulscene.cpp b/src/simulscene.cpp index a473644..60ee700 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(1000); + setSteps(21234); //setMeterPerPx(1/1000.0); setMeterPerPx(1); @@ -52,7 +52,11 @@ SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) { createResizeRects(); //path Item Erstellen - pathItem1 = addPath(QPainterPath()); + pathItem1 = addPath(QPainterPath(), QPen(QColor(255,137,11), 1, Qt::SolidLine)); + pathItem1->setZValue(100); + //pathItem1->setCacheMode(QGraphicsItem::DeviceCoordinateCache); + + setFlightPathVisible(); addLine(0,-298,0,298,QPen(Qt::green, 1, Qt::SolidLine) )->setCacheMode(QGraphicsItem::DeviceCoordinateCache); @@ -77,7 +81,7 @@ SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) { ellipse1->setRect(-2,-2,5,5); ellipse1->setPen(Qt::NoPen); ellipse1->setBrush(Qt::red); - ellipse1->setZValue(1); + ellipse1->setZValue(200); //ellipse1->scale(4,4); ellipse1->setAcceptDrops(true); connect(this,SIGNAL(changed(QList)),ellipse1,SLOT(handleSceneChange(QList))); @@ -98,14 +102,8 @@ SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) { } void SimulScene::startTimer() { + timer->setCurrentTime(0); - ani->clear(); - int currSteps = ellipse1->getCurrProbePath()->count(); - for (int i=0; isetPosAt(i/200.0, QPointF(x , 0.5 * ay * pow(( (x/1000) /vx),2) *1000 )); - ani->setPosAt(i/(double)currSteps, ellipse1->getCurrProbePath()->at(i) ); - //qDebug()<< getSteps(); - } timer->start(); } void SimulScene::stopTimer() { @@ -587,8 +585,24 @@ void SimulScene::setTimePerStep(double time) { \fn SimulScene::startCalculation() */ void SimulScene::startCalculation() { + pathItem1->setPath(QPainterPath()); ellipse1->calculateProbePath(ellipse1->pos()); pathItem1->setPath(ellipse1->getFlightPath()); + + //animationspfad berechnen + time_t anitimeb = time(0); + ani->clear(); + int currSteps = ellipse1->getCurrProbePath()->count(); + int entry_step = ceil(currSteps/2500.0); //jeder entry_step(te) step wird eingetragen + for (int i=0; isetPosAt(i/(double)currSteps, ellipse1->getCurrProbePath()->at(i) ); + } + //qDebug()<< getSteps(); + } + time_t anitimea = time(0); + qDebug()<< "animationszeit" <