#include <stdio.h>
#include <math.h>
#include "glib5.h"
/*
リスト [ ] が使えないので double の配列で代用.
*/

void lerp(double P[],double Q[],double T,double xy[]) {
  double X,Y;
  X=P[0]*(1-T)+Q[0]*T;
  Y=P[1]*(1-T)+Q[1]*T;
  xy[0]=X; xy[1]=Y;
}

void draw_bezier2(double P[],double Q[],double R[]) {
  double Step;
  double T;
  double Va[2];
  double Vb[2];
  double Vc[2];
  double V2a[2];
  double V2b[2];
  double V2c[2];
  Step=0.05; T=0;
  lerp(P,Q,T,Va);
  lerp(Q,R,T,Vb);
  lerp(Va,Vb,T,Vc);
  for (T=Step; T<=1.0; T += Step) {
    lerp(P,Q,T,V2a);
    lerp(Q,R,T,V2b);
    lerp(V2a,V2b,T,V2c);
    glib_color(NULL,0x0000ff);
    glib_line(Vc[0],Vc[1],V2c[0],V2c[1]);
    Vc[0]=V2c[0]; Vc[1]=V2c[1];
  }
  T=1.0;
  lerp(P,Q,T,V2a);
  lerp(Q,R,T,V2b);
  lerp(V2a,V2b,T,V2c);
  glib_color(NULL,0x0000ff);
  glib_line(Vc[0],Vc[1],V2c[0],V2c[1]);
}

void glib_draw() {
  double p1[2]={-3,0};
  double p2[2]={1,1};
  double p3[2]={3,0};
  glib_window(-4,-4,4,4);
  glib_clear();
  glib_color(NULL,0xff0000);
  glib_line(-3,0,3,0);
  draw_bezier2(p1,p2,p3);
  glib_flush();
}

int main() {
  glib_open();
  glib_loop();
}


