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