Mandelbrot mit JSXGraph
Aus Wiki1
(Unterschied zwischen Versionen)
| (Der Versionsvergleich bezieht 23 dazwischenliegende Versionen mit ein.) | |||
| Zeile 1: | Zeile 1: | ||
| - | <jsxgraph box="jxgbox" width=" | + | <jsxgraph box="jxgbox" width="600" height="700"> |
| - | + | const board = JXG.JSXGraph.initBoard('jxgbox', { | |
boundingbox: [-2.5, 1.5, 1.5, -1.5], | boundingbox: [-2.5, 1.5, 1.5, -1.5], | ||
axis: false, | axis: false, | ||
| Zeile 9: | Zeile 9: | ||
// Slider für Iterationstiefe | // Slider für Iterationstiefe | ||
| - | const sliderIter = board.create('slider', [[-2.3, 1.3], [ | + | const sliderIter = board.create('slider', [[-2.3, 1.3], [0.5, 1.3], [10, 50, 300]], { |
name:'Tiefe', | name:'Tiefe', | ||
snapWidth:1 | snapWidth:1 | ||
}); | }); | ||
| - | // Slider für Zoom | + | // Slider für Zoom |
| - | const sliderZoom = board.create('slider', [[-2.3, 1. | + | const sliderZoom = board.create('slider', [[-2.3, 1.2], [0.5, 1.2], [1, 1, 50]], { |
name:'Zoom', | name:'Zoom', | ||
| - | snapWidth: | + | snapWidth:1 |
}); | }); | ||
| + | |||
// Canvas ins DOM hängen | // Canvas ins DOM hängen | ||
const div = document.getElementById('jxgbox'); | const div = document.getElementById('jxgbox'); | ||
const canvas = document.createElement('canvas'); | const canvas = document.createElement('canvas'); | ||
| - | canvas.width = | + | canvas.width = 600; |
canvas.height = 600; | canvas.height = 600; | ||
canvas.style.position = 'absolute'; | canvas.style.position = 'absolute'; | ||
| Zeile 43: | Zeile 44: | ||
} | } | ||
| - | // | + | // Anfangsbereich |
let centerX = -0.5; | let centerX = -0.5; | ||
let centerY = 0; | let centerY = 0; | ||
| - | let | + | let baseWidth = 3.5; |
| - | + | let baseHeight = 3.0; | |
| - | + | ||
| - | function drawMandelbrot(maxIter) { | + | function drawMandelbrot(maxIter, zoom) { |
const spanX = baseWidth / zoom; | const spanX = baseWidth / zoom; | ||
const spanY = baseHeight / zoom; | const spanY = baseHeight / zoom; | ||
| Zeile 87: | Zeile 87: | ||
function update() { | function update() { | ||
| - | drawMandelbrot(Math.round(sliderIter.Value()) | + | drawMandelbrot(Math.round(sliderIter.Value()), Math.round(sliderZoom.Value())); |
| - | + | ||
} | } | ||
sliderIter.on('drag', update); | sliderIter.on('drag', update); | ||
| - | sliderZoom.on('drag', | + | sliderZoom.on('drag', update); |
| - | + | ||
| - | + | ||
| - | + | ||
// Panning mit Maus | // Panning mit Maus | ||
| Zeile 107: | Zeile 104: | ||
}); | }); | ||
| - | canvas.addEventListener('mouseup', () => { isDragging = false; }); | + | canvas.addEventListener('mouseup', () => { |
| - | canvas.addEventListener('mouseleave', () => { isDragging = false; }); | + | isDragging = false; |
| + | }); | ||
| + | |||
| + | canvas.addEventListener('mouseleave', () => { | ||
| + | isDragging = false; | ||
| + | }); | ||
canvas.addEventListener('mousemove', e => { | canvas.addEventListener('mousemove', e => { | ||
| Zeile 117: | Zeile 119: | ||
lastY = e.offsetY; | lastY = e.offsetY; | ||
| + | // Verschiebung in komplexer Ebene berechnen | ||
| + | const zoom = Math.round(sliderZoom.Value()); | ||
const spanX = baseWidth / zoom; | const spanX = baseWidth / zoom; | ||
const spanY = baseHeight / zoom; | const spanY = baseHeight / zoom; | ||
| Zeile 125: | Zeile 129: | ||
update(); | update(); | ||
} | } | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
}); | }); | ||
// Initial zeichnen | // Initial zeichnen | ||
update(); | update(); | ||
| + | |||
</jsxgraph> | </jsxgraph> | ||
Mit den Schiebereglern können Iterations-Tiefe und Zoom gesteuert werden. Mit der Maus+linke Maustaste kann der Bildausschnitt verschoben werden. | Mit den Schiebereglern können Iterations-Tiefe und Zoom gesteuert werden. Mit der Maus+linke Maustaste kann der Bildausschnitt verschoben werden. | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | + | [[Kategorie:KI-generiert]] | |
| - | + | ||
| - | + | ||
| - | + | ||
Aktuelle Version vom 14:08, 22. Dez. 2025
Mit den Schiebereglern können Iterations-Tiefe und Zoom gesteuert werden. Mit der Maus+linke Maustaste kann der Bildausschnitt verschoben werden.
