Názor k článku Fraktály v počítačové grafice XXIII od Pavel Tišnovský - Dobry den, tak jsem se dival do zdrojaku FractIntu,...

  • Článek je starý, nové názory již nelze přidávat.
  • 5. 4. 2006 11:05

    Pavel Tišnovský
    Zlatý podporovatel

    Dobry den,

    tak jsem se dival do zdrojaku FractIntu, a vypada to, ze vypocty u Newtonovych mnozin vyssich mocnin (tj. zn-1=0) jsou tam reseny docela jednoduse. Cely vypocet je rozdelen do dvou kroku:

    1. Jedrive si vyjadri vsechny koreny daneho polynomu, coz je jednoduche, protoze koreny lezi na jednotkove kruznici a jsou po ni pravidelne rozmisteny. Jednim z korenu je hodnota 1+0i, takze se zacne od ni a provede se (n-1) kroku s rozdilem uhlu 2*Pi/n. To je ta prvni (a jednodussi cast).
    2. Potom jsou ve zdrojacich vytvoreny funkce pro nasobeni a deleni dvou komplexnich cisel. Pomoci techto funkci je vyjadren Newtonuv vztah, tj. jak f(z) a f'(z), tak i jejich podil. To neni algoritmicky tezke vytvorit, protoze derivace polynomu zn je nzn-1 a to i v oboru komplexnich cisel. Podil f(z) a f'(z) je tedy mozne take vyjadrit algoritmicky a potom uz pouzit "jen" ty nasobici a delici funkce.

    Zminovane funkce vypadaji takto:

    complex_mult(_CMPLX arg1,_CMPLX arg2,_CMPLX *pz)
    {
       pz->x = arg1.x*arg2.x - arg1.y*arg2.y;
       pz->y = arg1.x*arg2.y+arg1.y*arg2.x;
       return(0);
    }
    
    
    complex_div(_CMPLX numerator,_CMPLX denominator,_CMPLX *pout)
    {
       double mod;
       if((mod = modulus(denominator)) < flt_min) return(1); conjugate(&denominator); complex_mult(numerator,denominator,pout); pout->x = pout->x/mod;
       pout->y = pout->y/mod;
       return(0);
    }