view src/samer/core_/util/LogMap.java @ 8:5e3cbbf173aa tip

Reorganise some more
author samer
date Fri, 05 Apr 2019 22:41:58 +0100
parents bf79fb79ee13
children
line wrap: on
line source
/*
 *	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)); }
}