Fourier-epiciklusok

Egymáson forgó körök rajzolják ki a Forma-1 pályáit, a saját rajzodat vagy egy feltöltött kép körvonalát. A szerver PHP-ben, valódi diszkrét Fourier-transzformációval (DFT) bontja a görbét forgó vektorokra; minél több kört engedsz meg, annál pontosabban követik a görbe minden kanyarját.

Mit rajzoljanak a körök?

Felhasznált körök: 1 / 1
A ténylegesen lefutó PHP-kód (kivonat)
// X_k = sum_n (x_n + i*y_n) * e^(-2*pi*i*k*n/N)
for ($k = 0; $k < $n; $k++) {
    $sumRe = 0.0;
    $sumIm = 0.0;
    for ($i = 0; $i < $n; $i++) {
        $theta = -2.0 * M_PI * $k * $i / $n;
        $sumRe += $points[$i]['x'] * cos($theta) - $points[$i]['y'] * sin($theta);
        $sumIm += $points[$i]['x'] * sin($theta) + $points[$i]['y'] * cos($theta);
    }
    $amplitude = sqrt($sumRe ** 2 + $sumIm ** 2) / $n;
    $phase = atan2($sumIm, $sumRe);
}

Hogyan bont fel egy görbét forgó körökre a Fourier-transzformáció?

A görbe minden pontját komplex számként kezeljük (x + iy), a diszkrét Fourier-transzformáció (DFT) pedig ezt a pontsorozatot különböző frekvenciájú, komplex exponenciális "forgó vektorok" összegére bontja fel - minden frekvenciakomponens egy-egy állandó sebességgel forgó kört ad.

A körök amplitúdója (sugara) az adott frekvencia "erősségét" mutatja a görbében - egy egyszerű, kerekded alakzatnál egyetlen nagy kör dominál, egy szögletes vagy részletes alakzatnál sok, kisebb amplitúdójú kör is szükséges a pontos közelítéshez.

A körök egymás végére vannak láncolva (ezek az epiciklusok), és a legkülső kör végpontja rajzolja ki az eredeti görbét - minél több kört (frekvenciakomponenst) engedsz meg, annál pontosabb a közelítés; elméletben végtelen sok kör pontosan visszaadná az eredetit.

Ugyanez a matematikai elv (Fourier-analízis) áll a hangfeldolgozás (equalizer, zajszűrés), a JPEG-tömörítés és a rádiótechnika mögött is - a "komplex jelet egyszerű, ismétlődő komponensekre bontani" gondolat rendkívül általános eszköz.