// Sin.java

package lt.ktu.gmj.tasks;

import lt.ktu.gmj.*;
import lt.ktu.gmj.propertySheet.*;

class SinDomain extends DomainWithConstraint {
 static final String []dimensions={
  "X Sin Argument",
  "Y Sin Argument",
  "Dummy"
 };

 public String[] dimensions ()
 { return dimensions; }

 SinDomain ()
 {
   min[0]=min[1]=min[2]=-2;
   max[0]=max[1]=max[2]= 2;

   defaultPoint.x[0]=0;
   defaultPoint.x[1]=0;
   defaultPoint.x[2]=0;
 }

};

public class Sin extends AbstractTask implements TaskWithAnalyzers {
 private SinDomain domain=new SinDomain();
 public double multiplier=1;
 public int function=1;

 public void customize (PropertyManager manager)
 {
   String []functions={
    "sin",
    "cos"
   };

   manager.add ( new DoubleProperty("Multiplier",
                  new FieldProvider(this, "multiplier"), 0.1, 1000));
   manager.add ( new ChoiceProperty("Function",
                  new FieldProvider(this, "function"),
                  functions ));
 }

 public Domain domain ()
 { return domain; }

 public double f (Point pt)
 {
   return function==0 ? 
            Math.sin (pt.x[0]*pt.x[0]+pt.x[1]*pt.x[1])*multiplier :
            Math.cos (pt.x[0]*pt.x[0]+pt.x[1]*pt.x[1])*multiplier;
 }

 public Class[] analyzers () throws ClassNotFoundException
 {
   Class spectrumClass=Class.forName("lt.ktu.gmj.analysis.Spectrum");
   return new Class[]{ spectrumClass };
 }

};

