/*
Eliza Dubroff
ps7#1
main.cc
4/24/97
*/

#include <iostream.h>
#include <math.h>
#include "layer.h"

double fill_clay(double x,double y);
double clay_sand(double x,double y);
double limit(double x,double y);

class Fill:public layer
{
 public:
 Fill(double w,double l):layer(w,l){};
 double height(double x,double y)
 {return (surface(x,y)-fill_clay(x,y));}
};

class Clay:public layer
{
 public:
 Clay(double w,double l):layer(w,l){};
 double height(double x,double y)
 {return (fill_clay(x,y)-clay_sand(x,y));}
}; 

class Sand:public layer
{
 public:
 Sand(double w,double l):layer(w,l){};
 double height(double x,double y)
 {return (clay_sand(x,y)-limit(x,y));}
};  

main()
{
 Fill my_fill(500.,950.);
 Clay my_clay(500.,950.);
 Sand my_sand(500.,950.);
 
 my_fill.find_volume();
 my_clay.find_volume();
 my_sand.find_volume();

 cout<<endl<<"Fill volume="<<my_fill.volume;
 cout<<endl<<"Clay volume="<<my_clay.volume;
 cout<<endl<<"Sand volume="<<my_sand.volume;
 cout<<endl;
}

double surface(double x,double y)
{
 return (pow(sin(.01*x),3))-(pow(cos(.005*y),3))+30;
}

double fill_clay(double x,double y)
{
 return (4*pow(cos(.002*x),3.0))-(1.4*pow(cos(.01*pow(x,5)*y),3.0))+10;
}

double clay_sand(double x,double y)
{
 return 5*pow(sin(x*y*y/2500),3);
}

double limit(double x,double y)
{
 return -20;
}
