🚀 主要機能: • Everything is Box哲学による革新的アーキテクチャ • WebAssemblyブラウザー対応プレイグラウンド • アーティスト協同制作デモ - 複数Boxインスタンス実証 • 視覚的デバッグシステム - DebugBox完全統合 • static box Mainパターン - メモリ安全設計 ⚡ 言語機能: • NOT/AND/OR/除算演算子完全実装 • ジェネリクス/テンプレートシステム • 非同期処理(nowait/await) • try/catchエラーハンドリング • Canvas統合グラフィックス 🎨 ブラウザー体験: • 9種類のインタラクティブデモ • リアルタイムコード実行 • WebCanvas/WebConsole/WebDisplay • モバイル対応完了 🤖 Built with Claude Code collaboration Ready for public release!
168 lines
4.9 KiB
Plaintext
168 lines
4.9 KiB
Plaintext
// 📊 マンデルブロ集合フラクタル - MathBoxの数学的美しさ
|
||
// WebCanvasBox で複素数計算の視覚化
|
||
|
||
print("📊 === Mandelbrot Fractal Generator ===")
|
||
|
||
// デバッグシステム
|
||
DEBUG = new DebugBox()
|
||
DEBUG.startTracking()
|
||
|
||
// 🔢 複素数Box - 数学的計算をBox化
|
||
box ComplexBox {
|
||
init { real, imaginary }
|
||
|
||
ComplexBox(r, i) {
|
||
me.real = r
|
||
me.imaginary = i
|
||
}
|
||
|
||
// 複素数の乗算 z * z
|
||
multiply(other) {
|
||
newReal = me.real * other.real - me.imaginary * other.imaginary
|
||
newImag = me.real * other.imaginary + me.imaginary * other.real
|
||
return new ComplexBox(newReal, newImag)
|
||
}
|
||
|
||
// 複素数の加算 z + c
|
||
add(other) {
|
||
return new ComplexBox(me.real + other.real, me.imaginary + other.imaginary)
|
||
}
|
||
|
||
// 絶対値の2乗(発散判定用)
|
||
magnitudeSquared() {
|
||
return me.real * me.real + me.imaginary * me.imaginary
|
||
}
|
||
}
|
||
|
||
// 🎨 フラクタル描画Box
|
||
box MandelbrotBox {
|
||
init { canvas, width, height, maxIterations, zoom, centerX, centerY }
|
||
|
||
MandelbrotBox(canvasId, w, h) {
|
||
me.canvas = new WebCanvasBox(canvasId, w, h)
|
||
me.width = w
|
||
me.height = h
|
||
me.maxIterations = 50
|
||
me.zoom = 1.0
|
||
me.centerX = -0.5 // マンデルブロ集合の中心
|
||
me.centerY = 0.0
|
||
|
||
DEBUG.trackBox(me, "MandelbrotGenerator")
|
||
}
|
||
|
||
// 点がマンデルブロ集合に属するか判定
|
||
mandelbrotIterations(c) {
|
||
z = new ComplexBox(0.0, 0.0) // z0 = 0
|
||
|
||
iteration = 0
|
||
loop (iteration < me.maxIterations) {
|
||
// z = z^2 + c の反復計算
|
||
z = z.multiply(z).add(c)
|
||
|
||
// 発散判定(|z| > 2)
|
||
if z.magnitudeSquared() > 4.0 {
|
||
return iteration
|
||
}
|
||
|
||
iteration = iteration + 1
|
||
}
|
||
|
||
return me.maxIterations // 収束(マンデルブロ集合内)
|
||
}
|
||
|
||
// 反復回数を色に変換
|
||
getColor(iterations) {
|
||
if iterations == me.maxIterations {
|
||
return "black" // マンデルブロ集合内
|
||
}
|
||
|
||
// カラフルなグラデーション
|
||
ratio = iterations / me.maxIterations
|
||
|
||
if ratio < 0.25 {
|
||
return "blue"
|
||
} else {
|
||
if ratio < 0.5 {
|
||
return "cyan"
|
||
} else {
|
||
if ratio < 0.75 {
|
||
return "yellow"
|
||
} else {
|
||
return "red"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// フラクタル描画
|
||
render() {
|
||
print("🎨 Rendering Mandelbrot fractal...")
|
||
print("Zoom: " + me.zoom + ", Center: (" + me.centerX + ", " + me.centerY + ")")
|
||
|
||
// 画面の各ピクセルを計算
|
||
y = 0
|
||
loop (y < me.height) {
|
||
x = 0
|
||
loop (x < me.width) {
|
||
// スクリーン座標を複素平面座標に変換
|
||
real = (x - me.width / 2) / (me.width / 4) / me.zoom + me.centerX
|
||
imag = (y - me.height / 2) / (me.height / 4) / me.zoom + me.centerY
|
||
|
||
c = new ComplexBox(real, imag)
|
||
iterations = me.mandelbrotIterations(c)
|
||
color = me.getColor(iterations)
|
||
|
||
// ピクセル描画
|
||
me.canvas.setFillStyle(color)
|
||
me.canvas.fillRect(x, y, 1, 1)
|
||
|
||
x = x + 2 // パフォーマンス向上のため2ピクセル刻み
|
||
}
|
||
y = y + 2
|
||
|
||
// 進行状況表示
|
||
if y % 20 == 0 {
|
||
progress = (y * 100) / me.height
|
||
print("Progress: " + progress + "%")
|
||
}
|
||
}
|
||
|
||
// 情報表示
|
||
me.canvas.setFillStyle("white")
|
||
me.canvas.fillText("Mandelbrot Set - Zoom: " + me.zoom, 10, 20)
|
||
me.canvas.fillText("Everything is Box Mathematics!", 10, 40)
|
||
}
|
||
|
||
// ズームイン
|
||
zoomIn(factor) {
|
||
me.zoom = me.zoom * factor
|
||
}
|
||
|
||
// 中心移動
|
||
setCenter(x, y) {
|
||
me.centerX = x
|
||
me.centerY = y
|
||
}
|
||
}
|
||
|
||
// 🚀 フラクタル生成開始!
|
||
print("Creating Mandelbrot fractal generator...")
|
||
mandelbrot = new MandelbrotBox("fractal-canvas", 400, 400)
|
||
|
||
// 基本フラクタル描画
|
||
mandelbrot.render()
|
||
|
||
print("🌟 Generated beautiful Mandelbrot fractal!")
|
||
print("🔢 Complex number calculations with ComplexBox")
|
||
print("🎨 Mathematical art through WebCanvasBox")
|
||
|
||
// ズームイン版も生成
|
||
print("📊 Creating zoomed version...")
|
||
mandelbrot.setCenter(-0.8, 0.156) // 興味深い領域
|
||
mandelbrot.zoomIn(2.0)
|
||
mandelbrot.render()
|
||
|
||
// 最終レポート
|
||
print(DEBUG.memoryReport())
|
||
print("✨ Mathematics is beautiful with Everything is Box!")
|
||
print("🐱 Complex numbers, iterations, colors - all unified as Boxes!") |