xjiang4 / ellipsoids

Automatically exported from code.google.com/p/ellipsoids
Other
0 stars 1 forks source link

Make plot_ia/ea methods in ReachContinuous/Discrete work in the same way as in the legacy reach class #121

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
the legacy class displayed the reach set itself instead of all the ellipsoidal 
approximations. We need to move the code from reach.plot_ia/ea into the new 
class and write the tests

Original issue reported on code.google.com by heartofm...@gmail.com on 19 May 2013 at 2:38

GoogleCodeExporter commented 8 years ago
Current implementation of plot_ia/ea methods in ReachContinuous is incorrect as 
it plots the ellipsoidal tubes instead of reach tube approximated by these 
tubes.

Please
1) study plot_ia/ea method of legacy "reach" class and make sure that you 
understand how they work. The idea is that plot_ia plots a convex hull of 
ellipsoidal tubes union, while plot_ea plots an intersection of ellipsoidal 
tubes.

2) Create two methods in EllTubeProj class - plotInt and plotExt. These methods 
should a) use the internal/external tubes stored in the relation 
b) use relation plotter
c) be implemented without a code copy-pasting. legacy plot_ia/ea methods are 
quite similar (though there are differences). Thus when implementing plotInt 
and plotExt methods in EllTubeProj you need to make sure that these methods 
call the same private method that contains the most of the source code. 

3) Make plot_ia/ea methods of ReachContinuous call plotInt and plotExt of 
ellTubeRel stored in reach object.

4)plot_ea and plot_ia methods in elltool.reach.ReachContinuous have to be 
implemented in a such way that allows 'hold on' and 'hold off' functions work 
correctly.
For example, if you run 'ell_demo3' you will find that axes provided by plot 
methods ignore 'hold on' right now. This needs to be fixed.

Original comment by heartofm...@gmail.com on 19 May 2013 at 6:42

GoogleCodeExporter commented 8 years ago
1) In rhomat function please use gras.gen.sqrtpos instead of sqrt as the latter 
can produce complex values when Q has close-to-zero eigen values which results
in (l,Ql) being slightly-negative. sqrtpos deals with such situations correctly.

2) in plotExt

a) can calcGrid only once and use 
        nPlot2dPoints
        nPlot3dPoints
properties instead of constnants. Default values are taken from
xml configuration edited via elltool.editconf.
 If you need to change the default values  - create a patch for xml configuraiton (you can
use already exisisting patches as example).

b) The way you form allEllMat is suboptimal, use the following technique:

allEllMat=cat(4,self.QArray{:});

This way the forth dimension will corresond to tube index.
If you need the tube index to be the first - use shiftdim afterwards 

And please remove all arrayfun calls, they are not needed.

c) I do not understand what you need "allEll2Mat = allEllMat(:,:,:,end);" for.
The reason is that cut will produce a tube with length(timeVec)=1 so end=1.
I suggest you just throw an exception if length(timeVec) is not equal to 1

d) What you do with arrayfun and getEll3Mat is just swapping dimensions.
This can be done via a single call of shiftdim. 

e) Even ellipsoids with trace(aMat) need to be displayed as patch objects
with just one vertex and one facet. This is needed for both simplifying writing 
the tests
and being able to see even such empty-interior ellipsoids in plot browser.

d) I still not sure that support-function based algorithm is a good idea because
of the reasons described a few days ago. I suggest you write a simple test
that tries to visualize an ellipsoid with bad-conditioned matrix, 
diag(10,0.1,0.1) for instance.
You will see how badly the support function algorithm works for such cases.

e) Please start writing the tests in parallel with implementation. I really 
believe that
it will save your time.

Original comment by heartofm...@gmail.com on 14 Jun 2013 at 6:54

GoogleCodeExporter commented 8 years ago
Update for 1)

Please have a look at fSingleRhoForOneEll subfunction in ellipsoid.rho - I 
believe that this code needs to be moved to rhomat and rho needs to be made to 
use rhomat. 
Also, after moving rhomat from ellipsoid class to a separate package you 
haven't fixed all references as there are many places in ellipsoid class that 
use this function. Since this function is separate now it needs to be covered 
with tests, they can be simple but still, we need them. Finally, please change 
an order of input arguments in this function: 
(shapeMat,dirsMat,absTol,centerVec). This way we can make both absTol and 
centerVec optional and you won't need to write "zeros(size(tempEll,1),1)" which 
is suboptimal.

Original comment by heartofm...@gmail.com on 14 Jun 2013 at 7:06

GoogleCodeExporter commented 8 years ago
How does showDiscrete work?

Original comment by heartofm...@gmail.com on 25 Jun 2013 at 12:29

GoogleCodeExporter commented 8 years ago
if showDiscrete is true, after displaying all tube (1 object) drawing
ellipsoids in every moment  with red color(1 object for all ellipsoids).

Original comment by lubi...@gmail.com on 25 Jun 2013 at 12:32

GoogleCodeExporter commented 8 years ago

Original comment by lubi...@gmail.com on 29 Jun 2013 at 8:41

GoogleCodeExporter commented 8 years ago

Original comment by lubi...@gmail.com on 29 Jun 2013 at 11:17

GoogleCodeExporter commented 8 years ago

Original comment by lubi...@gmail.com on 1 Jul 2013 at 4:41

GoogleCodeExporter commented 8 years ago
ReadyForReintegration status is only for me to use.

I investigated the failure of one of the tests and provided an answer via 
email. 
Also, I found a few problems with variable names, going to use google code 
review mechanics to mark them (you should received a notification).

Original comment by heartofm...@gmail.com on 1 Jul 2013 at 6:46

GoogleCodeExporter commented 8 years ago
Btw - have you added the tests for labels? If so - please tell me where I can 
find them.

Original comment by heartofm...@gmail.com on 1 Jul 2013 at 6:47

GoogleCodeExporter commented 8 years ago
plotByEa/plotByIa shold be documented in IReach so that both ReachContinuous 
and ReachDiscrete inherit those documentations. There is already a documentaion 
for plotIa/Ea but it is a bit outdates as color and other properties no longer 
passed as a structure. Thus please fix the help headers for plotIa/Ea in IReach 
and then use them to write the docs in plotByIa/Ea. At the end use help .... 
ReachDiscrete.plotByEa/Ia to make sure that the help is inherited correct.y

Original comment by heartofm...@gmail.com on 1 Jul 2013 at 7:34

GoogleCodeExporter commented 8 years ago

One more thing - plotByEa/Ia for ReachDiscrete should pass 'showDiscrete' = 
true. To do that I think you need to make protByApprox "protected" instead of 
public as right now. Then you need to overwrite plotByApprox in ReachDiscrete 
passing showDiscrete=true into plotIa/Ea. When doing so please avoid 
copy-pasting the code of plotByApprox from AReach, instead of please 
parametrize plotByApprox with showDiscrete property (or just optional 
parameter) and pass showDiscrete from the overwritten version of plotByApporox 
into AReach.plotByApporx. Also, please create 
elltool.reach.test.mlunit.DiscreteReachPlotTestCase inherited from 
elltool.reach.test.mlunit.ReachPlotTestCase  and add a special test there what 
checks for presence of discrete patch in plObj. In run_discrete_tests please 
make sure the replace elltool.reach.test.mlunit.ReachPlotTestCase with 
elltool.reach.test.mlunit.DiscreteReachPlotTestCase

Original comment by heartofm...@gmail.com on 1 Jul 2013 at 7:41

GoogleCodeExporter commented 8 years ago

Original comment by lubi...@gmail.com on 2 Sep 2013 at 2:06

GoogleCodeExporter commented 8 years ago
Details were sent via email

Original comment by heartofm...@gmail.com on 3 Sep 2013 at 9:10

GoogleCodeExporter commented 8 years ago

Original comment by lubi...@gmail.com on 7 Sep 2013 at 8:01

GoogleCodeExporter commented 8 years ago

Original comment by heartofm...@gmail.com on 9 Sep 2013 at 9:29