00001 // Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory 00002 // 00003 // This file is part of the Olena Library. This library is free 00004 // software; you can redistribute it and/or modify it under the terms 00005 // of the GNU General Public License version 2 as published by the 00006 // Free Software Foundation. 00007 // 00008 // This library is distributed in the hope that it will be useful, 00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00011 // General Public License for more details. 00012 // 00013 // You should have received a copy of the GNU General Public License 00014 // along with this library; see the file COPYING. If not, write to 00015 // the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00016 // Boston, MA 02110-1301, USA. 00017 // 00018 // As a special exception, you may use this file as part of a free 00019 // software library without restriction. Specifically, if other files 00020 // instantiate templates or use macros or inline functions from this 00021 // file, or you compile this file and link it with other files to 00022 // produce an executable, this file does not by itself cause the 00023 // resulting executable to be covered by the GNU General Public 00024 // License. This exception does not however invalidate any other 00025 // reasons why the executable file might be covered by the GNU General 00026 // Public License. 00027 00028 00029 #ifndef OLENA_GEOM_TRANSLATE_HH 00030 # define OLENA_GEOM_TRANSLATE_HH 00031 00032 # include <cmath> 00033 # include <iostream> 00034 00035 # include <oln/core/image2d.hh> 00036 # include <oln/core/fpoint2d.hh> 00037 # include <oln/core/fdpoint2d.hh> 00038 00039 namespace oln { 00040 00041 namespace geom { 00042 00043 template <class T, class F, class Exact> 00044 struct translate 00045 { 00046 typedef oln::image2d<T> im_type; 00047 00048 00049 image2d<T> 00050 operator()(const oln::image2d<T>& ima, 00051 const fdpoint2d<F> dp, 00052 fpoint2d_access<T, Exact> interp) 00053 { 00054 im_type res(ima.size()); 00055 oln_iter_type(im_type) it(ima); 00056 00057 for_all(it) 00058 { 00059 res[it] = interp(ima, fpoint2d<F>(it.row(), it.col()) - dp); 00060 } 00061 return res; 00062 } 00063 }; 00064 } 00065 } 00066 00067 00068 00069 00070 00071 #endif // !OLENA_GEOM_TRANSLATE_HH 00072