Mercurial > hg > jslab
diff src/samer/core_/util/LogMap.java @ 0:bf79fb79ee13
Initial Mercurial check in.
author | samer |
---|---|
date | Tue, 17 Jan 2012 17:50:20 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/samer/core_/util/LogMap.java Tue Jan 17 17:50:20 2012 +0000 @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2000, Samer Abdallah, King's College London. + * All rights reserved. + * + * This software is provided AS iS and WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +package samer.core.util; + +/** + This class maps a given interval of real numbers + to the interval [0,1], returning either the real + number, or converting it to an integer between 0 + and a given value (defaults to 256). + */ + +public class LogMap extends IMap +{ + public LogMap() { this(0.001,1.0,256); } + public LogMap(int m) { this(0.001,1.0,m); } + public LogMap(double t1, double t2) { this(t1,t2,256); } + public LogMap(double t1, double t2, int m) { setDomain(t1,t2); setIntRange(m); } + + public double getDomainMin() { return Math.exp(super.getDomainMin()); } + public double getDomainMax() { return Math.exp(super.getDomainMax()); } + public void setDomain( double t1, double t2) { + if (t1<0 || t2<0) throw new Error("Bad domain for log map"); + super.setDomain( Math.log(t1), Math.log(t2)); + } + + private static double log(double t) { return t>0 ? Math.log(t) : Double.NEGATIVE_INFINITY; } + public final double map( double t) { return super.map(log(t)); } + public final int clipInt( double t) { return super.clipInt(log(t)); } + public final int toInt( double t) { return super.toInt(log(t)); } + public double inverse(double t) { return Math.exp(super.inverse(t)); } + public double inverseFromInt(int i) { return Math.exp(super.inverseFromInt(i)); } +} + + + + + + + +