
Le 15 janv. 08 à 14:35, nivaul_s@lrde.epita.fr a écrit :
URL: https://svn.lrde.epita.fr/svn/oln/trunk/milena
ChangeLog: 2008-01-15 Simon Nivault <simon.nivault@lrde.epita.fr>
Add util::lemmings. * mln/util/lemmings.hh: New. * tests/util/Makefile.am: Add the following test. * tests/util/lemmings.cc: New.
Marrant comme nom. :) Il faudra que tu/vous m'en parle/parliez.
Index: trunk/milena/tests/util/lemmings.cc =================================================================== --- trunk/milena/tests/util/lemmings.cc (revision 0) +++ trunk/milena/tests/util/lemmings.cc (revision 1664) @@ -0,0 +1,74 @@ +// Copyright (C) 2007 EPITA Research and Development Laboratory
Petit rappel : nous sommes en 2008 ! Autant je reconnais que c'est ennuyeux de vérifier les fichiers existants et de les mettre à jour quand on les patche, autant c'est simple de créer des fichiers avec la bonne date du premier coup. De façon générale : méfiez-vous du copier-coller, qui, comme le dit l'adage bien connu, « tue le programmeur ». Relisez-vous SVP ! [...]
+ +int main () +{ + using namespace mln; + + typedef image2d<int> I; + + int vals[4][4] = {{2, 2, 6, 6}, + {2, 2, 6, 6}, + {3, 3, 4, 4}, + {3, 3, 4, 4}}; + + I ima = make::image2d<int>(vals); + + mln_point_(I) pt1(1, 0); + mln_point_(I) pt2(0, 2); + mln_point_(I) pt3(2, 3); + mln_point_(I) pt4(3, 1); + mln_point_(I) pt5(1, 1); + + mln_value_(I) vl1 = ima(pt1); + mln_value_(I) vl2 = ima(pt2); + mln_value_(I) vl3 = ima(pt3); + mln_value_(I) vl4 = ima(pt4); + mln_value_(I) vl5 = ima(pt5); + + mln_point_(I) ptl1 = util::lemmings(ima, ima.domain(), pt1, right, vl1); + mln_point_(I) ptl2 = util::lemmings(ima, ima.domain(), pt2, down, vl2); + mln_point_(I) ptl3 = util::lemmings(ima, ima.domain(), pt3, left, vl3); + mln_point_(I) ptl4 = util::lemmings(ima, ima.domain(), pt4, up, vl4); + mln_point_(I) ptl5 = util::lemmings(ima, ima.domain(), pt5, up, vl5); + + mln_assertion(ptl1 == point2d(1, 2)); + mln_assertion(ptl2 == point2d(2, 2)); + mln_assertion(ptl3 == point2d(2, 1)); + mln_assertion(ptl4 == point2d(1, 1)); + mln_assertion(ptl5 == point2d(-1, 1)); +}
Au passage, c'est plus cool (lire : correct) de réutiliser les notions usuelles d'Olena. En l'occurrence, sauf motif contraire, un point se nomme habituellement « p » (et non « pt ») et un delta-point, « dp » (et non « dpt »). Merci de conserver ces idiomes qui facilitent la lecture (en particulier pour une personne qui ne pratique pas le projet au jour le jour -- nos clients !).
Index: trunk/milena/mln/util/lemmings.hh =================================================================== --- trunk/milena/mln/util/lemmings.hh (revision 0) +++ trunk/milena/mln/util/lemmings.hh (revision 1664) @@ -0,0 +1,128 @@ +// Copyright (C) 2007 EPITA Research and Development Laboratory
Idem. Au passage, je pense qu'on dit un (1) lemming (sans « s »). À vérifier, et à corriger le cas échéant (dans le nom de fichier, le Makefile, les gardes, les noms des routines et classes, la doc, etc.). [...]
+/*! \file mln/util/lemmings.hh + * + * \brief Definition of an "lemmings" object.
s/an lemmings/a lemming/ [...]
+ /*! \brief Launch a lemmings on an image. + ** + ** A lemmings is the point \p pt that you put on an image \p ima + ** . This point will move through the image using the delta- point
Ce point (« . ») se balade en début de ligne, alors qu'il devrait être collé au dernier mot (« ima »).
+ ** \p dpt while consider his value on the given image.
while considering Je comprends à peu près l'idée de cet algorithme, mais l'explication n'est pas assez claire. Il faudrait sans doute détailler un peu plus.
+ ** + ** @return The first point that is not in the domain \p domain or + ** which value on the given image is different to the value \p + ** val. + ** + ** \pre The domain \p domain must be contained in the domain of \p + ** ima. + */ + template <typename I> + mln_point(I) + lemmings(const Image<I>& ima, const mln_pset(I)& domain, + const mln_point(I)& pt, const mln_dpoint(I)& dpt, + const mln_value(I)& val);
Même remarques sur « p » / « dp » vs « pt » / « dpt ». Idem pour « ima » auquel on préfère « input » dans le cas présent.