All pastes #1332077 Raw Edit

class Function

public java v1 · immutable
#1332077 ·published 2009-02-10 00:49 UTC
rendered paste body
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package mn;import com.bestcode.mathparser.IMathParser;import com.bestcode.mathparser.MathParserFactory;import java.util.Observable;import org.jfree.data.function.Function2D;import org.jfree.data.general.DatasetUtilities;import org.jfree.data.xy.XYDataset;/** * * @author viroos */public class Function  extends Observable implements Function2D{    IMathParser parser;    int samplesNumber;    XYDataset samples;        class Pair{        private double low;        private double hi;        public void setLow(double l){            low=l;        }        public void setHi(double h){            hi=h;        }        public double getLow(){            return low;        }        public double getHi(){            return hi;        }    }    private Pair range;    private Pair markers;    public void setFunction(String f){        parser=MathParserFactory.create();        parser.setExpression(f);    }    public void setRange(double l, double h){        range.setLow(l);        range.setHi(h);        samplesNumber=(int)(range.hi-range.low)*constants.density;        if(samplesNumber<constants.x_width*constants.density)            samplesNumber=(int)constants.x_width*constants.density;        samples=DatasetUtilities.sampleFunction2D(this, range.low, range.hi, samplesNumber, "f(x)");                setChanged();        notifyObservers(samples);        notifyObservers(range);            }    public double getRangeMin(){        return range.low;    }    public double getRangeMax(){        return range.hi;    }    public void setRangeMin(double m){        setRange(m,range.hi);    }    public void setRangeMax(double m){        setRange(range.low,m);    }    public double getValue(double x) {            parser.setX(x);            double y;            try {            y=parser.getValue();            }            catch (Exception ex){            y=0;            }            return y;    }    Function(double l,double h, String f){        range=new Pair();        markers=new Pair();        setFunction(f);        range.low=l;        range.hi=h;        samplesNumber=(int)(range.hi-range.low)*constants.density;        samples=DatasetUtilities.sampleFunction2D(this, range.low, range.hi, samplesNumber, "f(x)");    }    Function(String f){        range=new Pair();        markers=new Pair();        setFunction(f);        range.low=-constants.x_width/2;        range.hi=constants.x_width/2;        samplesNumber=(int)constants.x_width*constants.density;        samples=DatasetUtilities.sampleFunction2D(this, range.low, range.hi, samplesNumber, "f(x)");    }    @Override    public String toString(){        String s=new String();        for(int i=0;i<samples.getItemCount(0);++i){            s+="f("+samples.getXValue(0, i)+")="+samples.getYValue(0, i)+"\n";        }        return s;    }}