import java.io.*; 
import java.util.*;

/**
 * Title:        WaterMixApplet
 * Description:  Mixing water with Fuzzy Logic
 * Copyright:    Copyright (c) 2001
 * @author S. Robl <stefan@qdev.de>, A. Heinze <mail@aheinze.de>
 * @version 1.0
 */
 
class FuzzySet
{
  private int type;
  private double percentage;

  private double xl=0, yl=0;	// left
  private double xm=0;			// middle
  private double xr=0, yr=0;	// right
  
  private fline line_l=new fline();
  private fline line_m=new fline();
  private fline line_r=new fline();
  
  private fpoint points[];
  private int pointscount=0;
 
    
  public FuzzySet()
  {
    points=new fpoint [4];
    for(int i=0; i<4; i++)
      points[i]=new fpoint();
  }
  
  public void set(int type, double xl, double yl, double xm, double xr, double yr)
  {
    this.type=type;
    this.xl=xl;
    this.yl=yl;
    this.xm=xm;
    this.xr=xr;
    this.yr=yr;
    this.percentage=0;
  }
  
  public double getLeft()
  {
    return xl;
  }
  
  public fline getLeftLine()
  {
    return line_l;
  }
  
  public double getMiddle()
  {
    return xm;
  }
  
  public fline getMiddleLine()
  {
    return line_m;
  }

  public double getRight()
  {
    return xr;
  }
  
  public fline getRightLine()
  {
    return line_r;
  }
  
  public double getPointsCount()
  {
    return pointscount;
  }
  
  public fpoint getPoint(int nr)
  {
    return points[nr];
  }
  
  public double getPercentage()
  {
    return percentage;
  }
  
  public void setPercentage(double percentage)
  {
    if (percentage<0)
      percentage=0;
    if (percentage>100)
      percentage=100;
    this.percentage=percentage;
  }
  
  public int getType()
  {
    return type;
  }
  
  public void calcLines()
  {
    pointscount=0;
    
    line_l.calc(xl, yl, xm, 100);
    line_m.set(0, percentage);
    line_r.calc(xm, 100, xr, yr);

    if (percentage>0)
    {  
      points[pointscount++].set(xl, yl);
      
      if (percentage<100)
      {
        points[pointscount++].set(line_l.intersection(line_m));
        points[pointscount++].set(line_r.intersection(line_m));      
      }
      else
      {
        points[pointscount++].set(xm, 100);
      }
      
      points[pointscount++].set(xr, yr);
    }
  }
}
