UNPKG

@prachwal/mandelbrot-generator

Version:

Professional Mandelbrot fractal generator with TypeScript support, interactive web interface, and multiple output formats

111 lines 3.61 kB
/** * @fileoverview Central fractal engine and algorithm registry * @module FractalEngine */ /** * Central registry and manager for all fractal algorithms * Provides plugin-like architecture for adding new fractals */ export class FractalEngine { constructor() { this.algorithms = new Map(); this.defaultAlgorithm = null; } /** * Register a new fractal algorithm * @param algorithm - Fractal algorithm instance */ register(algorithm) { this.algorithms.set(algorithm.id, algorithm); // Set first registered algorithm as default if (!this.defaultAlgorithm) { this.defaultAlgorithm = algorithm.id; } } /** * Get algorithm by ID * @param id - Algorithm identifier * @returns Fractal algorithm instance */ getAlgorithm(id) { return this.algorithms.get(id); } /** * Get default algorithm */ getDefaultAlgorithm() { return this.defaultAlgorithm ? this.algorithms.get(this.defaultAlgorithm) : undefined; } /** * Get all available algorithms * @returns Array of algorithm metadata */ getAllAlgorithms() { return Array.from(this.algorithms.values()).map(alg => ({ id: alg.id, name: alg.name, description: alg.description, category: this.categorizeAlgorithm(alg), defaultConfig: alg.defaultConfig, parameterSchema: alg.parameterSchema })); } /** * Generate fractal data using specified algorithm * @param algorithmId - Algorithm to use * @param config - Generation configuration * @returns Generated image data */ generateFractal(algorithmId, config) { const algorithm = this.algorithms.get(algorithmId); if (!algorithm) { throw new Error(`Unknown algorithm: ${algorithmId}`); } // Validate config if (!algorithm.validateConfig(config)) { throw new Error(`Invalid configuration for algorithm: ${algorithmId}`); } return algorithm.generateData(config); } /** * Get iteration result for single point * @param algorithmId - Algorithm to use * @param point - Point in complex plane * @param config - Algorithm configuration */ iteratePoint(algorithmId, point, config) { const algorithm = this.algorithms.get(algorithmId); if (!algorithm) { throw new Error(`Unknown algorithm: ${algorithmId}`); } return algorithm.iterate(point, config); } /** * Get merged configuration with algorithm defaults * @param algorithmId - Algorithm ID * @param userConfig - User-provided configuration * @returns Merged configuration */ getMergedConfig(algorithmId, userConfig) { const algorithm = this.algorithms.get(algorithmId); if (!algorithm) { throw new Error(`Unknown algorithm: ${algorithmId}`); } return { ...algorithm.defaultConfig, ...userConfig }; } categorizeAlgorithm(algorithm) { // Simple categorization based on algorithm name // Could be made more sophisticated with proper metadata if (algorithm.id.includes('newton')) return 'newton'; if (algorithm.id.includes('ifs') || algorithm.id.includes('barnsley')) return 'ifs'; return 'escape_time'; } } // Global instance export const fractalEngine = new FractalEngine(); //# sourceMappingURL=fractal-engine.js.map