// Gnurbs - A curve and surface library
// Copyright (C) 2008-2026 Eric Bechet
//
// See the LICENSE file for contributions and license information.
// Please report all bugs and problems to <bechet@cadxfem.org>.
//

#include "nbeziercurve.h"
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;


void initcircle(nbeziercurve &s)
{
  int degree=s.nb_CP();
  ofstream of("cp.txt");
  for (int i=0;i<degree;i++)
  {
    double angle=i*pi/ (degree-1.);
    double random=2* (randr()-0.5) /100;
    random=0;
//  if (i<(degree-1)/2) random=0.05; else random=0;
//  if (i>(degree-1)/2) random=-0.05;
    if (i== (degree-1) /2) random=-1;
    npoint val;
    val[0]=cos(angle) * (1+random);
    val[1]=sin(angle) * (1+random);
    val[2]=0.;
    val[3]=1.;
    of <<  val[0] << " " << val[1]  << endl;
    s.CP(i) =val;
  }
  of.close();
}


void testbezier(void)
{
  npoint ret,ret2;
  int nbpts=5;
  nbeziercurve s(nbpts);
  initcircle(s);

  double eps= (1.) / (10* (nbpts-1));
  for (double u=0.;u<=1.+eps/2;u+=eps)
  {

    s.P(u,ret);
    ret.perspective_divide();
    cout << u << " "<< ret[0] << " "<< ret[1] ; // << " " << ret2[0] << " "<< ret2[1] << " " << (ret[0]*sin(pi/4)-ret[1]*cos(pi/4))/2 +0.25<< " "<< ret[0]*cos(pi/4)+ret[1]*sin(pi/4) << " ";
    cout << endl;
  }
}

int main(void)
{
  testbezier();
  return 0;
}
