Le 15 janv. 08 à 14:35, nivaul_s(a)lrde.epita.fr a écrit :
URL:
https://svn.lrde.epita.fr/svn/oln/trunk/milena
ChangeLog:
2008-01-15 Simon Nivault <simon.nivault(a)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.