File:Newtroot 1 0 0 0 0 m1.png

Da testwiki.
Vai alla navigazione Vai alla ricerca
File originale (1 655 × 1 655 pixel, dimensione del file: 1 003 KB, tipo MIME: image/png)

Questo file proviene da Wikimedia Commons e può essere utilizzato da altri progetti. Di seguito viene mostrata la descrizione presente nella pagina di descrizione del file.

Trasferito da en.wikipedia su Commons da Maksim.

La pagina di descrizione originale era qui. Tutti i nomi utente che seguono sono riferiti a en.wikipedia.

//

Quest'opera è considerata software libero; può essere redistribuita e/o modificata secondo i termini GNU General Public License così come pubblicata dalla Free Software Foundation; sia la versione 2 della licenza, o (a tua scelta) qualsiasi versione successiva. Quest'opera viene distribuita nella speranza che sia utile, ma senza alcuna garanzia; nemmeno con la garanzia di viabilità sul mercato o di appropriatezza per un particolare fine. Per maggiori dettagli, vedi il testo originale in inglese della versione 2 e della versione 3 della GNU General Public License.


c src code

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define PI 3.1415926535897932
#define TAU (PI * 2)
#define SQ2 1.4142135623730950
#define SQ3 1.7320508075688772
#define PHI 1.6180339887498948

#define SX 1111
#define SY 1111

//////////////////MAKE PRETTY PATTERNS HERE. DPOLY must be POLY differentiated.

#define POLY(z) z *z *z *z *z + (-1)
#define DPOLY(z) 5 * z *z *z *z

// #define POLY(z)  z*z*z*z*z*z*z*z*z + (-1)
// #define DPOLY(z) 9*z*z*z*z*z*z*z*z

// #define POLY(z)  z*z*z*z*z + (-3i) * z*z*z + (-5-2i) * z*z + (3) * z + (1)
// #define DPOLY(z) 5*z*z*z*z + (-3i) * 3*z*z + (-5-2i) * 2*z + (3) * 1

// #define POLY(z)  z*z*z*z*z*z + (2-4i) * z*z*z*z*z + (-1) * z + (2+4i)
// #define DPOLY(z) 6*z*z*z*z*z + (2-4i) * 5*z*z*z*z + (-1) * 1

// #define POLY(z)  z*z*z*z*z + (-1) * z + (-1)
// #define DPOLY(z) 5*z*z*z*z + (-1) * 1

// #define POLY(z)  z*z*z*z*z + (-1) - (cos(__imag__ z)+1i*sin(__imag__ z))*exp(__real__ z)
// #define DPOLY(z) 5*z*z*z*z -         (cos(__imag__z)+1i*sin(__imag__ z))*exp(__real__ z)

#define RSD 1923879

#define BPL ((SX * 3 + 3) & ~3)

void seedr(unsigned int);
unsigned int rnd();
unsigned int rndm(unsigned int);

unsigned char bhdr[54] = {0x42, 0x4D, 0x36, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,
                          0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
                          0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01,
                          0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                          0x30, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00,
                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

unsigned char po[BPL];

double gr[SY][SX][3];

void drawit();

int main(int a, char **b) {
  FILE *o;
  int x, y, c;
  double t;
  unsigned char *p; // fixed error due to conversion from unsigned char to char

  srand(time(0));
  drawit();

  p = bhdr + 2;
  *p++ = x = 54 + BPL * SY;
  *p++ = x >>= 8;
  *p++ = x >>= 8;
  *p = x >>= 8;
  p = bhdr + 18;
  *p++ = x = SX;
  *p++ = x >>= 8;
  *p++ = x >>= 8;
  *p++ = x >>= 8;
  *p++ = x = SY;
  *p++ = x >>= 8;
  *p++ = x >>= 8;
  *p = x >>= 8;

  if (!(o = fopen("newtroot.bmp", "wb"))) {
    fclose(o);
    printf("Couldn't open output file.\n");
    return (0);
  }

  fwrite(bhdr, 54, 1, o);

  for (x = SX * 3; x < BPL; ++x)
    po[x] = 0;

  for (y = SY - 1; ~y; --y) {
    for (x = 0, p = po; x < SX; ++x)
      for (c = 2; ~c; --c)
        *p++ = (t = gr[y][x][c]) <= 0 ? 0 : (t >= 1 ? 255 : t * 255);
    fwrite(po, BPL, 1, o);
  }

  fclose(o);
  return (0);
}

void drawit() {
  int x, y, c, n, bn, dx, dy, dz;
  unsigned int m, p;
  _Complex double z, w;
  double f, s;
  seedr(RSD);
  for (y = 0; y < SY; ++y)
    for (x = 0; x < SX; ++x) {
      z = (x * (10. / SX) - 5) - (y * (10. / SY) - 5) * 1i;
      w = POLY(z);

      for (f = s = 1; f > .01 && (__real__(w * ~w)) > .01;
           f *= .95, s = -s, w = POLY(z))
        z = z - w / (DPOLY(z));
      z = z - w / (DPOLY(z));

      for (n = 0; n < 10; ++n)
        z = z - (POLY(z)) / (DPOLY(z));

      z = f * (z * z) / (z * ~z);

      gr[y][x][0] = .5 * f /*+.02*s*f*/ + .24 * (__real__(z)) -
                    (SQ3 * .24) * (__imag__(z));
      gr[y][x][1] = .5 * f /*+.02*s*f*/ + .24 * (__real__(z)) +
                    (SQ3 * .24) * (__imag__(z));
      gr[y][x][2] = .5 * f /*+.02*s*f*/ - .48 * (__real__(z));
    }
}

unsigned int rseeda[624];
int rseedu;

void seedr(unsigned int s) {
  int n;
  rseedu = 624;
  rseeda[0] = s;
  for (n = 1; n < 624; ++n)
    rseeda[n] = s *= 69069u;
}

#define TEMPBLAH(x, y, z)                                                      \
  {                                                                            \
    v = (rseeda[x] & 0x80000000) | (rseeda[y] & 0x7fffffff);                   \
    rseeda[x] = rseeda[z] ^ (v >> 1) ^ (0x9908b0df & (0 - (v & 1)));           \
  }
void gennewr() {
  int n;
  unsigned int v;
  for (n = 0; n < 227; ++n)
    TEMPBLAH(n, n + 1, n + 397);
  for (; n < 623; ++n)
    TEMPBLAH(n, n + 1, n - 227);
  TEMPBLAH(623, 0, 396);
  rseedu = 0;
}
#undef TEMPBLAH

unsigned int rnd() {
  if (rseedu >= 624)
    gennewr();
  unsigned int v = rseeda[rseedu++];
  v ^= v >> 11;
  v ^= (v << 7) & 0x9d2c5680;
  v ^= (v << 15) & 0xefc60000;
  v ^= v >> 18;
  return (v);
}

unsigned int rndm(unsigned int m) {
  unsigned int v, c = (0u - m) / m;
  while ((v = rnd()) / m > c)
    ;
  return (v % m);
}
date/time username edit summary
13:01, 12 November 2005 en:User:129.177.30.18 (Fix bug: change x over [0, SY] to x over [0, SY]. Would only be a problem if SX != SY.)
05:07, 14 November 2004 en:User:Cyp (+Source)
05:06, 14 November 2004 en:User:Cyp (Finding roots with "Newton's method")

Registro originale del caricamento

Legend: (cur) = this is the current file, (del) = delete this old version, (rev) = revert to this old version. Click on date to download the file or see the image uploaded on that date. * (del) (cur) 05:06, 14 November 2004 . . en:User:Cyp Cyp ( en:User_talk:Cyp Talk) . . 1111x1111 (527065 bytes) (Finding roots with "Newton's method") Further descriptions on en:Newton fractal and de:Newton-Fraktal.

Didascalie

Aggiungi una brevissima spiegazione di ciò che questo file rappresenta

Elementi ritratti in questo file

raffigura

image/png

Cronologia del file

Fare clic su un gruppo data/ora per vedere il file come si presentava nel momento indicato.

Data/OraMiniaturaDimensioniUtenteCommento
attuale10:42, 22 giu 2007Miniatura della versione delle 10:42, 22 giu 20071 655 × 1 655 (1 003 KB)wikimediacommons>LutzLRecomputed with lower resolution, such that it does not break the thumbnail generation and thus existing uses of this image. Licence, source, ... remains unchanged

Nessuna pagina utilizza questo file.