// 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 "nbeziertriangle.h"

#include <cmath>
#include <iostream>

void nbeziertriangle::curvepoint(double u, double v, double w, npoint &C) const
{
  if (deg==0)
  {
    C=val[0];
  }
  else
  {
    nbeziertriangle tr(deg-1);
    for (int j=0;j<deg;++j)
    {
      for (int i=0;i<deg-j;++i)
      {
        int k=deg-1-i-j;
        tr.CP(i,j,k) =u*CP(i+1,j,k) +v*CP(i,j+1,k) +w*CP(i,j,k+1);
      }
    }
    tr.curvepoint(u,v,w,C);
  }
}

void nbeziertriangle::P(double u,double v, npoint& ret) const
{
  curvepoint(u*(1-v),v,1-v-u*(1-v),ret);
}
