42 schoolのfractolプロジェクト - フラクタル図形の可視化プログラム
Fractolは複数種類のフラクタル図形を美しく描画するグラフィカルアプリケーションです。数学的に興味深いフラクタル図形をリアルタイムで表示し、マウスホイールでのズーム機能により詳細な構造を探索できます。
graph TD
A[Fractol] --> B[Mandelbrot集合]
A --> C[Julia集合]
A --> D[Burning Ship]
B --> B1["Z*Z + C の反復計算"]
C --> C1["Z*Z + 定数 の反復計算"]
D --> D1["abs(Z)*abs(Z) + C の反復計算"]
B1 --> E[発散判定]
C1 --> E
D1 --> E
E --> F[色彩による可視化]
- 最も有名なフラクタル図形
- 複素数平面上で Z² + C の反復計算により生成
- 自己相似性を持つ美しい境界線
- Mandelbrot集合と密接な関係を持つフラクタル
- パラメータを変更することで様々な形状を生成
- デフォルト値: -0.8 + 0.125i
- Mandelbrot集合の変種
- 絶対値を使用した特殊な計算式
- 船のような独特な形状
- macOS (MinilibX対応)
- C言語コンパイラ (clang/gcc)
- OpenGL Framework
- AppKit Framework
git clone <repository_url>
cd 42_fractol
make
# Mandelbrot集合を表示
./fractol mandelbrot
# Julia集合を表示(デフォルトパラメータ)
./fractol julia
# Julia集合を表示(カスタムパラメータ)
./fractol julia -0.8 0.125
# Burning Ship を表示
./fractol burning-ship
操作 | 機能 |
---|---|
マウスホイール↑ | ズームイン |
マウスホイール↓ | ズームアウト |
ESCキー | 終了 |
ウィンドウ×ボタン | 終了 |
graph LR
A[main.c] --> B[引数解析・初期化]
B --> C[fractol.c]
C --> D[フラクタル計算]
D --> E[fractol_utils.c]
E --> F[描画・色彩計算]
F --> G[hook.c]
G --> H[ユーザー入力処理]
I[include/fractol.h] --> J[構造体・関数定義]
K[utils.c] --> L[文字列処理]
M[ft_atof.c] --> N[数値変換]
fractol/
├── Makefile # ビルド設定
├── main.c # メイン関数・初期化
├── fractol.c # フラクタル計算ロジック
├── fractol_utils.c # 描画・色彩・発散判定
├── hook.c # イベント処理
├── utils.c # ユーティリティ関数
├── ft_atof.c # 文字列→浮動小数点変換
├── include/
│ └── fractol.h # ヘッダファイル
└── minilibx_mms_20200219/ # グラフィックライブラリ
flowchart TD
A[座標 x,y] --> B[複素数 z に変換]
B --> C[反復計算開始]
C --> D{"発散判定<br/>abs(z) > 2"}
D -->|No| E["z = z*z + c"]
E --> F[反復回数 +1]
F --> G{"最大反復回数<br/>に到達?"}
G -->|No| D
G -->|Yes| H[集合内の点<br/>黒で描画]
D -->|Yes| I[発散<br/>反復回数に応じた色で描画]
- 発散速度に基づく色彩表現
- 立方計算による滑らかなグラデーション
- 集合内部は黒色で表現
- リアルタイムでの倍率調整
- マウスホイールによる直感的操作
- 詳細構造の探索が可能
-O3
最適化フラグの使用- 効率的なピクセル描画
- メモリアクセスの最適化
kmiyazaw - 42 Tokyo
このプロジェクトは42 schoolの教育目的で作成されました。