/* Chris von Krogh
   1.12 Problem Set 6 */

// macros and inclusions

#define null 0
#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
#include <math.h>
#include <fstream.h>
#include "Matrix.cc"

/******************************************************************/

int main() {
  Matrix A(3,4);  // 0row: rpm; 1row: lbs; 2row: hp
  double temp;
  double u;
  ifstream data_str("pelton.in");
  for (int i=0;i<2;i++){
    for (int j=0;j<4;j++){
    data_str >> temp;
    A.set(i,j,temp);}}
  data_str.close();
  for (int j=0;j<4;j++)
    A.set(2,j,A.get(0,j)*A.get(1,j)/10000);
  double x0=A.get(0,0);
  double x1=A.get(0,1);
  double x2=A.get(0,2);
  double x3=A.get(0,3);
  double y0=A.get(2,0);
  double y1=A.get(2,1);
  double y2=A.get(2,2);
  double y3=A.get(2,3);  

  Matrix B(101,2);  // the Bezier points will go in here
  for (int i=0;i<=100;i++){
    u=(double)i/100;
    temp=(1-u)*(1-u)*(1-u)*x0;
    temp+=3*(1-u)*(1-u)*u*x1;
    temp+=3*(1-u)*u*u*x2;
    temp+=u*u*u*x3;
    B.set(i,0,temp);
    temp=(1-u)*(1-u)*(1-u)*y0;
    temp+=3*(1-u)*(1-u)*u*y1;
    temp+=3*(1-u)*u*u*y2;
    temp+=u*u*u*y3;
    B.set(i,1,temp);}
  /* for (int i=0;i<=100;i++)
     cout << i << ": " << B.get(i,0) << " " << B.get(i,1) << endl; */
  ofstream output ("Bezier.out");
  for (int i=0;i<=100;i++)
    output << B.get(i,0) << " " << B.get(i,1) << endl;
}
