// Sin.java

package lt.ktu.gmj.tasks;

import lt.ktu.gmj.*;
import lt.ktu.gmj.propertySheet.*;

class SinDomain extends Domain {
 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;
 }

};

class SinMultiplierProvider extends SimplePropertyProvider {
 public Sin sin;

 public SinMultiplierProvider (Sin _sin)
 { sin=_sin; }

 public Object get ()
  { return new Double(sin.multiplier); }

 public void set (Object value) throws InvalidPropertyException
  { sin.multiplier=((Double)value).doubleValue(); }

};

public class Sin implements Task {
 private SinDomain domain=new SinDomain();
 public double multiplier=1;

 public void customize (PropertyManager manager)
 {
   manager.add ( new DoubleProperty("Multiplier",
                  new SinMultiplierProvider (this), 0.1, 1000));
 }

 public Domain domain ()
 { return domain; }

 public double f (Point pt)
 {
   return Math.sin (pt.x[0]*pt.x[0]+pt.x[1]*pt.x[1])*multiplier;
 }

};

