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)); }
+}
+
+
+
+
+
+	
+
+