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