00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "LogRange.h"
00017
00018 #include <algorithm>
00019 #include <cmath>
00020
00021 void
00022 LogRange::mapRange(float &min, float &max, float logthresh)
00023 {
00024 if (min > max) std::swap(min, max);
00025 if (max == min) max = min + 1;
00026
00027 if (min >= 0.f) {
00028
00029 max = log10f(max);
00030
00031 if (min == 0.f) min = std::min(logthresh, max);
00032 else min = log10f(min);
00033
00034 } else if (max <= 0.f) {
00035
00036 min = log10f(-min);
00037
00038 if (max == 0.f) max = std::min(logthresh, min);
00039 else max = log10f(-max);
00040
00041 std::swap(min, max);
00042
00043 } else {
00044
00045
00046
00047 max = log10f(std::max(max, -min));
00048 min = std::min(logthresh, max);
00049 }
00050
00051 if (min == max) min = max - 1;
00052 }
00053
00054 float
00055 LogRange::map(float value, float thresh)
00056 {
00057 if (value == 0.f) return thresh;
00058 return log10f(fabsf(value));
00059 }
00060
00061 float
00062 LogRange::unmap(float value)
00063 {
00064 return powf(10.0, value);
00065 }