Witam
Mam problem z wyliczeniem DCT (dyskretnej transformaty kosinusowej).
Na stronie http://cnx.org/content/m13173/latest/ znalazłem wzór wraz z przykładową macierzą oraz wyliczonymi dla niej współczynnikami DCT.
Mój kod wylicza poprawnie tylko element [0][0] i nie wiem gdzie popełniam błąd.
int u,v,x,y;
float suma,wynik,wu,wv;
const pi = 3.141592653589793;
for (u = 0; u < 8; u++)
{
for (v = 0; v < 8; v++)
{
suma = 0;
if (u == 0) wu = 0.353553390593274; // 1/sqrt(8)
if (u != 0) wu = 0.5; // sqrt(2/8)
if (v == 0) wv = 0.353553390593274;
if (v != 0) wv = 0.5;
for (x = 0; x < 8; x++)
{
for (y = 0; y < 8; y++)
{
suma = suma + (StringGrid1->Cells[x][y]* cos((u*((2*x)+1)*pi)/16) * cos((v*((2*y)+1)*pi)/16));
}
}
wynik = RoundTo(wu * wv * suma,0);
StringGrid2->Cells[u][v] = wynik;
}
}
Ps. Program w Borland C++ Builder. (StringGrid1 to tablica wejściowa)