samer@0: package samer.units; samer@0: import samer.core.*; samer@0: import samer.core.types.*; samer@0: import samer.maths.*; samer@0: import java.util.*; samer@0: samer@0: public class Oscillator implements Generator samer@0: { samer@0: double c, s; samer@0: double x1, x2; samer@0: samer@0: public Oscillator(double f) { setFrequency(f); reset(); } samer@0: samer@0: public DoubleModel getFrequencyModel() { samer@0: return new DoubleModel() { samer@0: public void set(double f) { setFrequency(f); } samer@0: public double get() { return Math.atan(s/c); } samer@0: }; samer@0: } samer@0: samer@0: public void reset() { x1=1; x2=0; } samer@0: public void setFrequency(double f) { samer@0: s=Math.sin(f); samer@0: c=Math.cos(f); samer@0: } samer@0: samer@0: public void dispose() {} samer@0: public double next() samer@0: { samer@0: double y1 = x1*c - x2*s; samer@0: double y2 = x1*s + x2*c; samer@0: x1=y1; x2=y2; samer@0: return x2; samer@0: } samer@0: samer@0: public void next(double [] x) { samer@0: for (int i=0; i