Professional fractal generator with TypeScript support, interactive web interface, and multiple output formats. Supports Mandelbrot Sets, Julia Sets, and Burning Ship fractals.
# Instaluj pakiet globalnie
npm install -g @prachwal/mandelbrot-generator
# Lub dodaj do swojego projektu
npm install @prachwal/mandelbrot-generator
git clone https://github.com/prachwal/mandelbrot-generator.git
cd mandelbrot-generator
npm install
# Zainstaluj pakiet
npm install @prachwal/mandelbrot-generator
# Użyj w swoim projekcie
import { generateMandelbrotSVG, defaultConfig } from '@prachwal/mandelbrot-generator';
const svg = generateMandelbrotSVG({
...defaultConfig,
width: 800,
height: 600,
colorPalette: 'fire'
});
console.log('Generated SVG:', svg.length, 'characters');
# Instaluj globalnie
npm install -g @prachwal/mandelbrot-generator
# Generuj fractal
mandelbrot-generator --width 1920 --height 1080 --iterations 256
import {
generateMandelbrotSVG,
saveImageAsSVG,
defaultConfig,
interestingPoints,
type MandelbrotConfig
} from '@prachwal/mandelbrot-generator';
// Szybkie generowanie Mandelbrota
const svg = generateMandelbrotSVG(defaultConfig);
// Z customową konfiguracją
const config: MandelbrotConfig = {
width: 1200,
height: 800,
maxIterations: 256,
centerX: -0.7269,
centerY: 0.1889,
zoom: 100,
colorPalette: 'fire'
};
const customSvg = generateMandelbrotSVG(config);
// Zapisz do pliku
const outputPath = saveImageAsSVG(config, 'my-fractal.svg');
console.log(`Saved to: ${outputPath}`);
// Użyj predefiniowanych lokacji
const elephantSvg = generateMandelbrotSVG({
...defaultConfig,
...interestingPoints.elephant,
maxIterations: 512
});
import {
MandelbrotFractal,
JuliaFractal,
BurningShipFractal,
fractalEngine
} from '@prachwal/mandelbrot-generator';
// Użyj konkretnego algorytmu
const mandelbrot = new MandelbrotFractal();
const julia = new JuliaFractal();
const burningShip = new BurningShipFractal();
// Lub użyj FractalEngine do zarządzania algorytmami
const availableAlgorithms = fractalEngine.getAllAlgorithms();
const juliaAlgorithm = fractalEngine.getAlgorithm('julia');
// Generuj z dowolnym algorytmem
const config = julia.defaultConfig;
config.juliaC = JuliaFractal.getPresets().dragon;
const imageData = julia.generateData(config);
npm start
Wygeneruje plik mandelbrot.svg w folderze output/.
Uwaga: Wersja Node.js generuje pliki SVG zamiast PNG aby uniknąć problemów z zależnościami systemowymi. SVG oferuje skalowalne grafiki wektorowe idealnie nadające się do wizualizacji fraktali.
cd test_web
npm install
npm run serve
Otwórz http://localhost:8080 - czyste środowisko testowe używające biblioteki jako zależności npm.
npm run serve # uruchamia z głównego folderu
Następnie otwórz http://localhost:8081 w przeglądarce.
Różnice:
test_web/ - Czyste środowisko używające opublikowanej bibliotekiweb/ - Development interface z mieszanym kodem biblioteki/aplikacjiPełna dokumentacja API jest dostępna w formacie TypeDoc:
# Wygeneruj dokumentację HTML
npm run docs
# Wygeneruj dokumentację Markdown
npm run docs:update-md
# Uruchom serwer dokumentacji HTML
npm run docs:serve
Dokumentacja obejmuje:
📖 Zobacz dokumentację Markdown | 🌐 Zobacz dokumentację HTML
# Uruchom wszystkie testy
npm test
# Uruchom testy z pokryciem kodu
npm run test:coverage
# Wygeneruj raport HTML pokrycia
npm run test:coverage-report
Projekt ma 100% pokrycie kodu dla głównego modułu mandelbrot.js.
Możesz dostosować parametry generowania z pełnym typowaniem TypeScript:
import { MandelbrotConfig } from './src/types.js';
import { defaultConfig } from './src/config.js';
const config: MandelbrotConfig = {
...defaultConfig,
width: 1920, // Rozdzielczość X
height: 1080, // Rozdzielczość Y
maxIterations: 256, // Maksymalne iteracje
zoom: 100, // Poziom powiększenia
centerX: -0.7269, // Centrum X (rzeczywiste)
centerY: 0.1889, // Centrum Y (urojone)
colorPalette: 'fire' // Paleta kolorów
};
rainbow - 🌈 Kolorowa tęcza (domyślna)fire - 🔥 Ogień (czerwień, pomarańcz, żółć)cool - ❄️ Chłodne (niebieskie, zielone)classic - ⚫ Klasyczne (czarno-białe)hot - 🌋 Gorące (intensywne czerwienie)electric - ⚡ Elektryczne (neonowe)ocean - 🌊 Ocean (głębokie niebieskie)sunset - 🌅 Zachód słońca (ciepłe kolory)Klasyczny zbiór Mandelbrota z formułą z_{n+1} = z_n² + c, gdzie z_0 = 0.
import { MandelbrotFractal } from '@prachwal/mandelbrot-generator';
const mandelbrot = new MandelbrotFractal();
const config = mandelbrot.defaultConfig;
const imageData = mandelbrot.generateData(config);
Zbiory Julii z formułą z_{n+1} = z_n² + c, gdzie z_0 = point i c jest stałą.
import { JuliaFractal } from '@prachwal/mandelbrot-generator';
const julia = new JuliaFractal();
// Użyj predefiniowanego presetu
const presets = JuliaFractal.getPresets();
const config = {
...julia.defaultConfig,
juliaC: presets.dragon // { real: -0.7269, imag: 0.1889 }
};
const imageData = julia.generateData(config);
Dostępne presety Julia Sets:
dragon - Smok Julia (-0.7269, 0.1889)airplane - Samolot (-0.75, 0.11)spiral - Spirala (-0.4, 0.6)dendrite - Dendryt (0, 1)rabbit - Królik (-0.123, 0.745)Fraktal "płonący statek" z formułą z_{n+1} = (abs(z.real) + i*abs(z.imag))² + c.
import { BurningShipFractal } from '@prachwal/mandelbrot-generator';
const burningShip = new BurningShipFractal();
const config = {
...burningShip.defaultConfig,
centerX: -0.5,
centerY: -0.6,
colorPalette: 'fire'
};
const imageData = burningShip.generateData(config);
import { generateMandelbrotData } from './src/mandelbrot.js';
const config: MandelbrotConfig = {
width: 800,
height: 600,
maxIterations: 100,
escapeRadius: 2,
zoom: 1,
centerX: -0.5,
centerY: 0,
colorPalette: 'rainbow'
};
const imageData = generateMandelbrotData(config);
import { JuliaFractal } from '@prachwal/mandelbrot-generator';
const julia = new JuliaFractal();
const presets = JuliaFractal.getPresets();
// Smok Julia
const dragonConfig = {
...julia.defaultConfig,
juliaC: presets.dragon,
maxIterations: 256,
colorPalette: 'fire'
};
// Samolot Julia
const airplaneConfig = {
...julia.defaultConfig,
juliaC: presets.airplane,
maxIterations: 512,
colorPalette: 'cool'
};
const dragonData = julia.generateData(dragonConfig);
const airplaneData = julia.generateData(airplaneConfig);
import { BurningShipFractal } from '@prachwal/mandelbrot-generator';
const burningShip = new BurningShipFractal();
const config = {
...burningShip.defaultConfig,
width: 1200,
height: 800,
centerX: -0.5,
centerY: -0.6,
zoom: 2,
maxIterations: 200,
colorPalette: 'fire'
};
const imageData = burningShip.generateData(config);
import { fractalEngine } from '@prachwal/mandelbrot-generator';
const algorithms = fractalEngine.getAllAlgorithms();
const baseConfig = {
width: 400,
height: 400,
maxIterations: 100,
colorPalette: 'rainbow'
};
// Generuj ten sam obszar różnymi algorytmami
algorithms.forEach(algo => {
const config = { ...algo.defaultConfig, ...baseConfig };
const imageData = algo.generateData(config);
console.log(`Generated ${algo.name} fractal`);
});
import { interestingPoints } from './src/config.js';
// Dolina słoni - słynne miejsce w zbiorze Mandelbrota
const elephantConfig: MandelbrotConfig = {
...defaultConfig,
...interestingPoints.elephant,
maxIterations: 256,
colorPalette: 'fire'
};
// Wzory koników morskich
const seahorseConfig: MandelbrotConfig = {
...defaultConfig,
...interestingPoints.seahorse,
maxIterations: 512,
colorPalette: 'ocean'
};
import { generateMandelbrotDataOptimized } from './src/mandelbrot.js';
const hiResConfig: MandelbrotConfig = {
width: 3840,
height: 2160,
maxIterations: 1000,
zoom: 1000,
centerX: -0.7269,
centerY: 0.1889,
colorPalette: 'electric'
};
// Użyj wersji zoptymalizowanej dla dużych obrazów
const imageData = await generateMandelbrotDataOptimized(hiResConfig, 8);
mandelbrot-generator/
├── src/ # Kod źródłowy TypeScript
│ ├── index.ts # Główny plik dla Node.js
│ ├── mandelbrot.ts # Algorytmy Mandelbrota
│ ├── config.ts # Konfiguracja i ciekawe punkty
│ ├── colors.ts # Palety kolorów
│ └── types.ts # Definicje typów TypeScript
├── web/ # Interfejs webowy
│ ├── docs/ # Dokumentacja TypeDoc
│ ├── index.html # Strona główna
│ ├── main.js # Kod JavaScript dla przeglądarki
│ └── style.css # Stylowanie
├── tests/ # Testy jednostkowe
│ └── mandelbrot.test.ts
├── dist/ # Skompilowany kod TypeScript
├── coverage/ # Raporty pokrycia testów
├── output/ # Wygenerowane fraktale (SVG)
├── package.json # Konfiguracja NPM
├── tsconfig.json # Konfiguracja TypeScript
├── vite.config.js # Konfiguracja Vite
├── typedoc.json # Konfiguracja dokumentacji
└── README.md # Ten plik
# Budowanie
npm run build # Kompiluj TypeScript
npm run build:watch # Kompiluj z obserwowaniem
npm run build:web # Buduj dla web
# Rozwój
npm run dev # Serwer dev Vite
npm run dev:watch # TypeScript + Vite równolegle
# Testowanie
npm run test # Uruchom testy
npm run test:watch # Testy z obserwowaniem
npm run test:coverage # Pokrycie kodu
# Dokumentacja
npm run docs # Wygeneruj dokumentację
npm run docs:serve # Serwuj dokumentację
npm run docs:watch # Dokumentacja z obserwowaniem
# Inne
npm run clean # Wyczyść wszystkie pliki build
npm run examples # Uruchom przykłady
npm run publish:npm # 🚀 Opublikuj do NPM (jedno polecenie!)
Jedno polecenie do publikacji:
npm run publish:npm
To polecenie automatycznie:
npm run clean)npm run build)npm test)npm run docs)npm publish --access public)Wymagania przed publikacją:
npm loginpackage.json zaktualizowanaTen projekt wykorzystuje nowoczesny stack technologiczny:
| Funkcja | Opis | Moduł |
|---|---|---|
generateMandelbrotData() |
Generuje dane obrazu fraktala | mandelbrot.ts |
mandelbrotIteration() |
Oblicza iteracje dla punktu | mandelbrot.ts |
getColor() |
Mapuje iteracje na kolor | colors.ts |
calculateBounds() |
Oblicza granice płaszczyzny | config.ts |
| Typ | Opis | Plik |
|---|---|---|
MandelbrotConfig |
Konfiguracja generowania | types.ts |
RGBColor |
Kolor RGB jako tupla | types.ts |
PaletteType |
Typ palety kolorów | types.ts |
FractalBounds |
Granice płaszczyzny zespolonej | types.ts |
📖 Pełna dokumentacja API (Markdown) | 🌐 Dokumentacja HTML
Zainstaluj: npm install @prachwal/mandelbrot-generator
// Główne funkcje generowania (legacy API - tylko Mandelbrot)
import {
generateMandelbrotSVG, // Generuj SVG jako string
saveImageAsSVG, // Zapisz SVG do pliku
generateMandelbrotData, // Generuj raw data
mandelbrotIteration // Oblicz iteracje dla punktu
} from '@prachwal/mandelbrot-generator';
// Nowoczesne algorytmy fraktali (zalecane)
import {
MandelbrotFractal, // Klasa algorytmu Mandelbrota
JuliaFractal, // Klasa algorytmu Julia Sets
BurningShipFractal, // Klasa algorytmu Burning Ship
fractalEngine // Engine do zarządzania algorytmami
} from '@prachwal/mandelbrot-generator';
// Konfiguracja i kolory
import {
defaultConfig, // Domyślna konfiguracja
interestingPoints, // Predefiniowane lokacje
colorPalettes, // Dostępne palety
calculateBounds // Oblicz granice płaszczyzny
} from '@prachwal/mandelbrot-generator';
// Funkcje kolorów
import {
getColor, // RGB dla iteracji
rgbToHex, // RGB → Hex
getColorHex // Hex dla iteracji
} from '@prachwal/mandelbrot-generator';
// Typy TypeScript
import type {
MandelbrotConfig, // Legacy config (używaj FractalConfig)
FractalConfig, // Nowa uniwersalna konfiguracja
PaletteType, // Typ palety
RGBColor, // Kolor RGB
Complex, // Liczba zespolona
FractalResult // Wynik iteracji fraktala
} from '@prachwal/mandelbrot-generator';
MIT License - Zobacz LICENSE dla szczegółów.
Stworzony przez Prachwal - Generator fraktala Mandelbrota w TypeScript.