00001 
00002 #ifndef __mapping_hpp__
00003 #define __mapping_hpp__
00004 
00005 #include <math.h>
00006 
00007 
00008 
00009 
00010 static
00011 void MapSquareToDisk(const float& su, const float& sv,
00012                            float& du,       float &dv) {
00013   float r, theta;
00014   
00015   if((su == 0.0f) && (sv == 0.0f)) {
00016     du = dv = 0.0;
00017     return;
00018   } 
00019 
00020   if(su >= -sv){
00021     if(su > sv) {
00022       
00023       r = su;
00024       theta = (sv > 0.0)?(sv / r):(8.0 + (sv / r));
00025     }
00026     else {
00027       
00028       r = sv;
00029       theta = 2.0 - (su / r);
00030     }
00031   }
00032   else {
00033     if(su <= sv) {
00034       
00035       r = -su;
00036       theta = 4.0 - (sv / r);
00037     }
00038     else {
00039       
00040       r = -sv;
00041       theta = 6.0 + (su / r);
00042     }
00043   }
00044   theta *= M_PI / 4.0f;
00045 
00046   du = r * cos(theta);
00047   dv = r * sin(theta);
00048 }
00049 
00050 #endif