Witam,
Przeleciałem całego googla i dalej nie rozumiem jak dokonać aproksymacji krzywej krzywą beziera.
Napisałem coś takiego ale nie działa
public void Bezier(double[] b, int cpts, double[] p) throws Exception
{
int npts = (b.length)/2;
int iCount = 0; int jCount = 0;
double step; double t = 0;
step = (double)1.0/(cpts - 1);
for(int i1 = 0; i1 != cpts; i1++)
{
if ((1.0 - t) < 5e-6)
t = 1.0;
jCount = 0;
p[iCount] = 0.0;
p[iCount + 1] = 0.0;
for (int i = 0; i != npts; i++)
{
double basis = Bernstein(npts - 1, i, t);
p[iCount] += basis * b[jCount];
p[iCount + 1] += basis * b[jCount + 1];
jCount = jCount +2;
}
iCount += 2;
t += step;
}
SaveToFile(p,b, "test.csv");
}
private double Ni(int n, int i) throws Exception
{
double ni;
double a1 = justMeth(n); double a2 = justMeth(i);
double a3 = justMeth(n-i);
ni = a1 / (a2*a3);
System.out.print("ni " + ni);
return ni;
}
private double Bernstein(int n, int i, double t) throws Exception
{
double basis; double ti; double tni;
if (t == 0.0 && i == 0)
ti = 1.0;
else
ti = Math.pow(t, i);
if (n == i && t == 1.0)
tni = 1.0;
else
tni = Math.pow((1 - t), (n - i));
basis = Ni(n, i) * ti * tni;
return basis;
}
private double justMeth(int n) throws Exception
{
return appx[n];
}
Proszę o pomoc bądź najlepiej opis na przykładzie (psełdokod)