Science Workflow

Graphics and Rendering

Sounio のサンプルをネイティブ実行して生成した、ターミナル上の科学的な表示とラスター画像。

Back to Science Hub

グラフィックとレンダリング

このページでは、examples/graphics/ のターミナル上の科学的な表示と、examples/render/ の5つのラスター画像を紹介します。

画像は Sounio のサンプルプログラムをネイティブ実行し、その PPM 出力を SVG に変換して生成しています。来歴の記録には、ソースのコミット、コンパイラの配布パッケージ、画素比較の結果が記載されています。この比較はサンプル出力の再現性を確認するものであり、数学的な精度や過去の証明の検証は対象外です。

実際のレイター出力

暗色背景に赤、緑、青の払い下げ角を持つソフトウェアレイター化された三角形。
三角形レイター

この例は実際のバリセントレーターです。公開ページの画像はコンパイラ出力から生成されています,手描きのモックアップではありません。

Source: examples/render/triangle_basic.sio

bin/souc run examples/render/triangle_basic.sio > triangle_basic.ppm
暗色背景に赤、緑、青の軸線を持つ透視ワイアフレームキューブです。
ワイアフレームキューブ

この例は回転されたキューブを描画し、辺を深さによって色付けし、Sounioコードから直接ポータブルなPPMフレームを出力します。

Source: examples/render/cube_wireframe.sio

bin/souc run examples/render/cube_wireframe.sio > cube_wireframe.ppm

(前回のセクションから続いて)

16x16の不確実性セルの熱図で、冷たい暗い正方形から明るい暖い正方形までの変化を示しています。
不確実性領域

このプレビューは型付き不確実性を実際の認識論的領域に変換しています:値はx軸に沿って走り、epsilonはy軸に沿って走り、明るさは不確実性が高くなると落ちます。

Source: examples/render/uncertainty_field.sio

bin/souc run examples/render/uncertainty_field.sio > uncertainty_field.ppm

(前回のセクションから続いて)

赤の干渉ノードX、青の観測ノードMとY、そしてグレイの潜在ノードUに接続された矢印を含む因果グラフです。
因果DAG

このレンダーは、do(X)-スタイルの干済色付けと明示的な潜在の伴隨者を含むフロントドアスタイルのグラフを直接ピクセルでエンコードします。

Source: examples/render/causal_dag.sio

bin/souc run examples/render/causal_dag.sio > causal_dag.ppm
暗色背景に配置された原状の暗い姿、明るい回転された姿、および接続のガイドラインを示すテトラエドラーのウィアフレーム。
四つ面体の回転

このシーンは四つ面体をクイータニョン数学で回転させ、両方の姿を画面空間に投影し、元のと回転された頂点間の対応線を重ねて表示します。

Source: examples/render/quaternion_rotation.sio

bin/souc run examples/render/quaternion_rotation.sio > quaternion_rotation.ppm

このグラフィックススタックの理由

  • 実コンパイラ出力:上に示されたラスターセクションは、チェックされた souc run 出力から生成されています。画面スクリーンショットではなくです。
  • 転送可能な出力形式:ターミナルデモは Unicode/ANSI を使用し、ラスターデモは純粋な PPM を出力します。
  • ウィンドウ依存性なし:現在の例では、X11、OpenGL または GUI ツールキットの依存性はありません。
  • SSH フレンドリー:ターミナルとファイルベースのレンダリングは、リモートシステムでも動作します。

ターミナルギャラリー

オクタオニョン乗算表

最高の瑰宝である、Fano平面構造がすぐに色のパターンを介して見える、完全に色付けされた8次元の代数の可視化です。

(前回のセクションから続いて)

06_octonion_color_table.sio
╔══════════════════════════════════════════════════════════════════════════╗
║           オクテオニョン乗算テーブル - カラー版              ║
╚══════════════════════════════════════════════════════════════════════════╝

(前のセクションから続いています)

    ×  │  1    i    j    k    l   il   jl   kl
  ────┼────────────────────────────────────────────────
 1  │  1    i    j    k    l   il   jl   kl
 i  │  i   -1    k   -j   il   -l  -kl   jl
 j  │  j   -k   -1    i   jl   kl   -l  -il
 k  │  k    j   -i   -1   kl  -jl   il   -l
 l  │  l  -il  -jl  -kl  -1    i    j    k
il  │ il    l  -kl   jl  -i   -1   -k    j
jl  │ jl   kl    l  -il  -j    k   -1   -i
kl  │ kl  -jl   il    l  -k   -j    i   -1

説明:1=実数  ijk=四次元数  liljlkl=八次元数  dim=負数

/>


fMRI脳活性熱図

32×32の脳切れをグラデーン強度でUnicodeブロック文字で可視化する。

(前回のセクションから続いて)

02_fmri_octonion_activation.sio
╔═══════════════════════════════════════════════════╗
║     fMRI BRAIN ACTIVATION - Slice z=32           ║
╚═══════════════════════════════════════════════════╝

(前回のセクションから続いています)

前 ░░░░░░░░░░░░░░░░░░░ ░░░░░░▒▒▒▒▒▒▒▒░░░░░░░░ ░░░░▒▒████████▒▒░░░░ ░░░▒▒██████████████▒▒░░░ ░░░▒▒███████████████████▒▒░░░ L ░░▒▒███████░░░░███████▒▒░░ R ░░▒▒███████░░░░░░███████▒▒░░ ░░▒▒████████░░████████▒▒░░ ░░░▒▒███████████████▒▒░░░ ░░░░▒▒▒███████▒▒▒░░░░ ░░░░░░▒▒▒▒▒▒▒▒░░░░░░░░ ░░░░░░░░░░░░░░░░░░░ 後ろ

(前回のセクションから続いています)

強度: ░=0.0 ▒=0.3 █=0.6 █=1.0 領域: 視覚 モーター 前額葉`} />


3D Wireframe Cube

回転した正方体の等角投影と軸の示す指标。

(前のセクションから続いています)

phase3_showcase.sio - 回転する立方体
╔═══════════════════════════════════════════════════╗
║          3D ウィアフレーム キューブ - フレーム 42           ║
╚═══════════════════════════════════════════════════╝

(前のセクションから続いています)

Y │ ┌───────────┐ ╱│ ╱│ ╱ │ ╱ │ ╱ │ ╱ │ ┌───────────┐ │ │ │ │ │ │ └───────│───┘ │ ╱ │ ╱ │ ╱ │ ╱ │╱ │╱ └───────────┘──────X ╱ Z

(前のセクションから続いています)

投影: 等角(30°) 軸: X=赤 Y=緑 Z=青`} />


パーティクルシステムアニメーション

重力とドラッグ力を伴う物理基づきのパーティクルの噴出。

(前回から続いています)

phase5_showcase.sio - パーティクルフォンテイン
╔═══════════════════════════════════════════════════╗
║       パーティクルフォンテイン - フレーム 120              ║
╚═══════════════════════════════════════════════════╝

(前回から続いています)

★ ★ ★ · · · ★ ★ · · · ○ · · ○ · · ○ ○ ○ ○ · │ · · │ · · │ · ════════════════════█════════════════════

パーティクル: 活性 847 物理:gravity=0.1,drag=0.99,wind=0.02 寿命:★=新 ·=中 ·=古い`} />


流体力学 (ナビエ・ストークス方程式)

ジョス・スタムの「安定した流れ」アルゴリズムに基づいた Smoke シミュレーション。

(前回から続いています)

phase5_showcase.sio - 流体力学
╔═══════════════════════════════════════════════════╗
║         流体力学 - 喫煙           ║
╚═══════════════════════════════════════════════════╝

░░░░░░
          ░░░░▒▒░░░░
        ░░▒▒▓▓▒▒░░░░
      ░░░▒▒██▓▓▒▒░░░░
    ░░░░▒▒▓▓██▓▓▒▒░░░░
      ░░▒▒▓▓███▓▓▒▒░░
        ░░▒▒███▒▒░░
          ▒▒███▒▒
            ▓▓██▓▓
            ████
            ████
            ▓▓▓▓
           ░██░
            ▀▀
═══════════════════════════════════════════

(前のセクションから続きます)

アルゴリズム:Stable Fluids (Stam 1999)
グリッド:64×64、viscosity=0.0001

分岐図

ロジスティックマップでは、 period-doubling から混乱への级化を示しています。

(前のセクションから続いています)

phase6_showcase.sio - 分岐
╔═══════════════════════════════════════════════════╗
║    ロジスティックマップの分岐 - 周期倍增    ║
╚═══════════════════════════════════════════════════╝


x↑
1│                                    ░░░░░░░░░░░░
│                                  ░░▒▒▒▒▒▒▒▒░░
│                                ░░▒▒████████▒▒
│                              ▒▒▒▒████████▒▒░
│                           ▒▒▒▒  ████████
│                        ▒▒▒▒      ████████
│                     ▒▒▒▒          █  █
│                  ░░░               █    █
│              ░░░░
│          ░░░░
│      ░░░░
0│░░░░░
└──────────────────────────────────────────────→r
 2.5                3.0                3.5   4.0


x_{n+1} = r × x_n × (1 - x_n)
示すことは:固定点 → 周期2 → 周期4 → 乱数

力導向グラフレイアウト

フラッチャーマン・リンゴルドのアルゴリズムを用いた社会ネットワークの可視化。

(前回から続き)

phase7_showcase.sio - ネットワークグラフ
╔═══════════════════════════════════════════════════╗
║      力導きグラフ - ソーシャルネットワーク       ║
╚═══════════════════════════════════════════════════╝

(前回から続いています)

(Bob)─────────(Eve)
          │╲             ╱│
          │ ╲           ╱ │
          │  ╲         ╱  │
          │   ╲       ╱   │
          │    ╲     ╱    │
          │     ╲   ╱     │
          │      ╲ ╱      │
         (Alice)───(Carol)
          │      ╱ ╲      │
          │     ╱   ╲     │
          │    ╱     ╲    │
          │   ╱       ╲   │
          │  ╱         ╲  │
          │ ╱           ╲ │
          │╱             ╲│
        (Dave)─────────(Frank)

(前回から続き)

ノード: 6  辺: 12
アルゴリズム: フルチャーマン・リンゴルド
温度: 0.05 (収束)

カルマンフィルタの確率分散

色付け付けされた確率レベルの順続的なベイズ推論更新。

(前回から続いています)

10_kalman_filter_color.sio
╔═══════════════════════════════════════════════════╗
║      カルマンフィルタ - センサーフッジング                ║
╚═══════════════════════════════════════════════════╝

センサーフッジングを通じた不确定性の削減:

前 (σ=10.0m):
██████████████████████████████████████ 高

GPS後 (σ=4.5m):
███████████████                        中

IMU後 (σ=0.5m):
██                                        低

LiDAR後 (σ=0.1m):
▏                                        非常低

(前回から続き)

精度向上 (1/σ²):
事前:  ▏
+GPS:   █
+IMU:   ████████
+LiDAR: ████████████████████████████████

合計不確かさ減少: 99%
精度向上: 10,405×
08_climate_ensemble_color.sio
╔═══════════════════════════════════════════════════╗
║    CMIP6 気候予測 - SSP2-4.5         ║
╚═══════════════════════════════════════════════════╝

2100年の平均気温変動 (1850-1900年から):

(前回から続き)

GFDL-ESM4:    █████████████████│        1.8°C ± 0.2
HadGEM3:      █████████████████████│     2.1°C ± 0.3
MIROC6:       ███████████████████│       1.9°C ± 0.25
IPSL-CM6A:    ███████████████████████│   2.3°C ± 0.4
MPI-ESM:      ████████████████████│      2.0°C ± 0.1
            ├─────────────────────────────────┤
            0                    1.5°C      3.0°C

(前回から続き)

集団平均:
            ████████████████████│    2.02°C ± 0.18

⚠ パリ 1.5°C 目標: 12% の確率で下回る可能性
⚠ パリ 2.0°C 目標: 47% の確率で下回る可能性

例の実行方法

SOUC_BIN=bin/souc

レイヤーレンダリング (標準出力に PPM)

“$SOUC_BIN” run examples/render/triangle_basic.sio > triangle_basic.ppm “$SOUC_BIN” run examples/render/cube_wireframe.sio > cube_wireframe.ppm

科学図形表示

“$SOUC_BIN” run examples/visual/06_octonion_color_table.sio “$SOUC_BIN” run examples/visual/10_kalman_filter_color.sio “$SOUC_BIN” run examples/visual/12_animated_diffusion.sio

(前回のセクションから続いて)

グラフィックスライブラリのデモ

“$SOUC_BIN” run examples/graphics/demos/phase3_showcase.sio # 3D “$SOUC_BIN” run examples/graphics/demos/phase5_showcase.sio # アニメーション “$SOUC_BIN” run examples/graphics/demos/phase7_showcase.sio # ネットワーク

正確なコンパイラ出力からウェブサイトのレンダープレビューを更新

npm —prefix website run generate:render-assets

ライブラリ構造

このページでは、ライブラリの構造について説明します。この構造は、ライブラリの内部に含まれる各パッケージやモジュールの配置を示しています。

パッケージ

パッケージは、関連する関数やクラスを集めた単位です。これらは、ライブラリ全体の構造の中で最も基本的な単位です。

パッケージの構造

パッケージの構造は、以下のようになります。

/ ├── package1/ │ ├── file1.py │ └── file2.py ├── package2/ │ ├── file3.py │ └── file4.py └── package3/ ├── file5.py └── file6.py

この構造では、パッケージ1にはfile1.pyとfile2.pyが含まれ、パッケージ2にはfile3.pyとfile4.pyが含まれ、パッケージ3にはfile5.pyとfile6.pyが含まれています。

モジュール

モジュールは、パッケージ内に含まれる関数やクラスのグループです。これらは、パッケージ内で関連性の高い関数やクラスを集めたものです。

モジュールの構造

モジュールの構造は、以下のようになります。

/ ├── package1/ │ ├── module1.py │ ├── module2.py │ └── module3.py ├── package2/ │ ├── module4.py │ ├── module5.py │ └── module6.py └── package3/ ├── module7.py └── module8.py

この構造では、パッケージ1にはmodule1.py、module2.py、module3.pyが含まれ、パッケージ2にはmodule4.py、module5.py、module6.pyが含まれ、パッケージ3にはmodule7.py、module8.pyが含まれています。

関数とクラス

関数とクラスは、モジュール内に含まれる基本のコードブロックです。これらは、モジュール内で定義された関数やクラスです。

関数とクラスの構造

関数とクラスの構造は、以下のようになります。

/ ├── package1/ │ ├── module1.py │ ├── module2.py │ └── module3.py │ ├── function1.py │ └── class1.py ├── package2/ │ ├── module4.py │ ├── module5.py │ └── module6.py │ ├── function2.py │ └── class2.py └── package3/ ├── module7.py └── module8.py ├── function3.py └── class3.py

この構造では、パッケージ1のモジュール1にはfunction1.pyとclass1.pyが含まれ、パッケージ2のモジュール4にはfunction2.pyとclass2.pyが含まれ、パッケージ3のモジュール7にはfunction3.pyとclass3.pyが含まれています。

このような構造を持つライブラリの中で、関数やクラスを利用することができます。これにより、コードの再利用性が向上し、ライブラリの整體構造が明確になります。

(前回から続き)

フェーズモジュール機能
フェーズ1canvas, colors, drawing, text基本的なプリミティブ、ANSI色、形
フェーズ2axes, scatter, line_plot, bar_chart, histogram, heatmap2次元グラフ
フェーズ3projection, wireframe, scatter3d3次元可視化
フェーズ4input, interactive_plotズーム、パン、マウス/キーボード
フェーズ5animation, particle_system, fluid_simアニメーション、物理
フェーズ6phase_diagram, bifurcation, poincare, streamlines科学グラフ
フェーズ7graph, force_directed, tree_layout, graph_renderネットワーク可視化

(前回のセクションから続いています)


開始する

フェーズのデモを表示する

bin/souc run examples/graphics/demos/phase1_showcase.sio