Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | Related Pages

flattern.cpp

00001 /***************************************************************************
00002                         flattern.cpp  -  description
00003                             -------------------
00004     begin                : july 2nd, 2006
00005     copyright            : (C) 2006 by Frédéric RODRIGO
00006     email                : f.rodrigo free.fr
00007     
00008     $Id: flattern.cpp 83 2006-11-05 20:46:42Z neoneurone $
00009  ***************************************************************************/
00010 
00011 /***************************************************************************
00012  *                                                                         *
00013  *   This program is free software; you can redistribute it and/or modify  *
00014  *   it under the terms of the GNU General Public License as published by  *
00015  *   the Free Software Foundation; either version 2 of the License, or     *
00016  *   any later version.                                                    *
00017  *                                                                         *
00018  ***************************************************************************/
00019 
00020 #include "flattern.h"
00021 
00022 #include "map.h"
00023 
00024 #include <cmath>
00025 
00026 namespace MapGen
00027 {
00028 
00029    /*=====================================================================*/
00030 Flattern::Flattern()
00031 {
00032     MAP_DEBUG( "ctor1" );
00033 }
00034 
00035 
00036    /*=====================================================================*/
00037 Flattern::Flattern( const float power ):
00038 _power(power)
00039 {
00040     MAP_DEBUG( "ctor2" );
00041 }
00042 
00043 
00044    /*=====================================================================*/
00045 Flattern::~Flattern()
00046 {
00047     MAP_DEBUG( "dtor" );
00048 }
00049 
00050 
00051    /*=====================================================================*/
00052 void Flattern::apply( Map* map )
00053 {
00054     float min, max;
00055     _getMinMax( map, &min, &max );
00056 
00057     float coef = fabs( max - min );
00058 
00059     for( uint x=0 ; x<map->getW() ; ++x )
00060         for( uint y=0 ; y<map->getH() ; ++y )
00061         {
00062             if( min >= 0 )
00063             {
00064                 map->setAt( x, y, powf((map->getAt(x,y)-min)/coef,_power)*coef+min );
00065             }
00066             else /* min < 0 and max > 0 */
00067             {
00068                 float h = map->getAt(x,y);
00069                 if( h >= 0 )
00070                 {
00071                     map->setAt( x, y, powf(h/max,_power)*max );
00072                 }
00073                 else
00074                 {
00075                     map->setAt( x, y, fabs(powf(fabs(h)/min,_power))*min );
00076                 }
00077             }
00078         }
00079 }
00080 
00081 }

Generated on Sat Nov 11 10:21:09 2006 for OpenCity by  doxygen 1.4.2