Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.
1/1
Na této stránce jsou k dispozici zdrojové soubory, které jsem vytvářel při výkladu během výuky. Nejsou to ukázkové a bezchybné zdrojové soubory. Ba naopak, jsou to pracovní neučesané verze, které vznikaly interaktivně ve výuce, často s cílem ukázat, že "takto se to nemá".
1 /*
2 * Soubor: 20120202-Thu-mandelbrot.c
3 * Datum: 02.02.2012 08:21
4 * Autor: Marek Nožka, nozka <@t> spseol <d.t> cz
5 * Licence: GNU/GPL
6 * Úloha:
7 * Popis:
8 ****************************************************/
9 #define _ISOC99_SOURCE
10 #define _GNU_SOURCE
11 #include <stdio.h>
12 #include <complex.h>
13
14 /* *************** Makra ******************** */
15 #define SLOUPCU 1600
16 #define RADKU 1200
17
18
19 char mandel(double x,double y)
20 {
21 unsigned int hloubka = 128;
22 double complex C = x + y*I;
23 double complex Z = 0;
24 unsigned short int n = 0;
25 while ( n < hloubka && cabs(Z)< 2 ) {
26 n++;
27 Z = Z*Z + C;
28 }
29 if (n <hloubka) {
30 return '-'; // do množiny nepatří
31 } else {
32 return '+'; // do množiny patří
33 }
34
35
36
37 }
38
39 /****************************************************
40 * Hlavní program.
41 ****************************************************/
42 int main(void)
43 {
44 int i, j;
45 int r, s;
46 double zoom = 1;
47 double x0 = -0;
48 double y0 = 0;
49 char matice[RADKU][SLOUPCU];
50
51 /* - je černá
52 * + je bílá */
53
54 /* naplním matici daty */
55 unsigned int MIN = SLOUPCU > RADKU ? SLOUPCU : RADKU;
56 for (r = 0; r < RADKU; r++) {
57 for (s = 0; s < SLOUPCU; s++) {
58 matice[r][s] =
59 mandel(2*((double)s-SLOUPCU/2.0)/(MIN*zoom)+x0,
60 2*((double)r- RADKU/2.0)/(MIN*zoom)+y0 );
61 }
62 }
63
64
65 //////////////////////////////////////////////////////////////
66 /* uložím matici do obrázku */
67 FILE *soubor;
68 soubor = fopen("matice.xpm", "w");
69 fprintf(soubor, "! XPM2\n%d %d 2 1\n", SLOUPCU, RADKU);
70 fprintf(soubor, "- c #000000\n");
71 fprintf(soubor, "+ c #ffffff\n");
72 for (i = 0; i < RADKU; i++) {
73 for (j = 0; j < SLOUPCU; j++) {
74 fputc(matice[i][j], soubor);
75 }
76 fputc('\n', soubor);
77 }
78
79 fclose(soubor);
80
81
82 return 0;
83 }