*)各種変換
最終更新日時: 2025年08月25日 12:57
-
Ripple/Wave Distortionが理解できない
-
multiの変数のマッピング方法などが理解できていない
-
実装確認
- 射影変換
- 指数変換・対数変換
- 円反転
- べき写像
- リフレクション(つまらなそうなのでやらない)
- スワール変換
- ツワール変換
- フィッシュアイ変換
- ピンチ変換
- リップル変換
- ドロステ変換
- ハウスホルダー反射
- 双曲線回転/ローレンツ変換で現れる。拡張・ワープなどに応用。
- ケイリー変換
- バイリニア変換(メビウス変換)
- Z変換
- ラプラス変換
- メルリン変換
- ヒルベルト変換
- パラメータせん断変換
- 極座標変換
- バイケル変換/カオス的混合を示す1次元写像
- ヘノン写像/2次元力学系のカオスアトラクタを生む写像
- ニュートン反復
- [ ]
極座標系変換
Section titled “極座標系変換”- 実装あり
- repository = g-sandbox
- branch = multi
GLSLで uv (2D座標) を原点からの距離と角度の値をもとに図形を歪ませる際に便利な変換を10種挙げる。
極座標系での変換を念頭に現在のを下記のように定義し、 変換先のを新たに求める式を複数掲載する。
を定義することがここで述べる変換の本質となる。 fragment shaderでは、直交座標系から極座標系に変換し、を求めるため、 全ての変換は本質的に下記のプロセスで変換する
varying vec2 vUv; //vertex shaderのuvからfragment shaderに引き継ぐ cartesianToPolar(uv, r, theta); //極座標変換
... //変換処理で、rPrime(r')とthetaPrime(theta')を求める
vec2 uvPrime = polarToCartesian(rPrime, thetaPrime); //直交座標変換 gl_FragColor = texture2D(uTexture, uvPrime); //書き込むSpiral Zoom
Section titled “Spiral Zoom”- 原点付近を中心に回転とズームを同時に行う
k回転の強さαスケールε原点の0を避けている小さな値- の項を入れるとアニメーション可能
Twirl / Swirl
Section titled “Twirl / Swirl”- 中心から離れるほど回転量を増やす渦巻き効果
\betaを調整すると非線形なねじれが生まれる- の項を入れるとアニメーション可能(など)
Pinch / Punch
Section titled “Pinch / Punch”- 原点付近を引き絞る(Pinch)または膨らませる(Punch)
- で中心付近縮小, で拡大
- 例えば、を時間の関数にするとアニメーションになる
Nested Sine-Cosine Distortion
Section titled “Nested Sine-Cosine Distortion”- 角度を
sin -> cosでネストして非線形歪み - 例:
cos(sin(\theta))を振幅に掛けて,波打つようなパターンを作る
Ripple / Wave Distortion
Section titled “Ripple / Wave Distortion”A,B振幅,\omega周波数,\phi位相- 格子全体が波打つような効果
Polar Swirl
Section titled “Polar Swirl”- 半径方向に正弦歪み,かつ回転を掛ける複合エフェクト
- 中心付近でトリッキーなうねりを生む
Zooming Swirl
Section titled “Zooming Swirl”- 時間
tによるズーム + 回転を組み合わせ - アニメーション時に渦巻きが連続的に拡大・縮小
Sinusoidal UV Warp
Section titled “Sinusoidal UV Warp”uv.xに対してsinを掛け足す,uv.yに対してcosを掛け足す- 縦横で違う周期や振幅を与えて歪みを作る
Spiral Vortex
Section titled “Spiral Vortex”- 半径が大きいほど回転角が小さくなる (指数減衰)
- 中心部を強くねじり,外側は緩やか
Double Spiral Zoom
Section titled “Double Spiral Zoom”- 距離に応じた2種類の回転要素 (線形 + 対数) を重ねる
- さらに
r'によるズーム因子\gammaを導入 - 中心付近と外側とで異なる渦のかかり方
基本的な変換
Section titled “基本的な変換”アフィン変換
Section titled “アフィン変換”行列 と並進ベクトル による線形変換と平行移動の合成。拡大縮小、回転、せん断、平行移動
斜めに写された写真を正面から写したように変換する
中心原点・半径 の円での反転 (複素数表現)。内側と外側が反転し、円周はそのまま
指数変換、対数変換
Section titled “指数変換、対数変換”- 指数変換は帯状領域を円環領域に、対数変換は円環領域を帯状領域へ
- 対数関数は多価性を持つ
複素数の極座標表示 。フラクタル生成や歪みエフェクト
リフレクション(鏡映)
Section titled “リフレクション(鏡映)”実軸反射の例(複素共役)。円・直線に対する反射
スワール変換(Swirl Transformation)
Section titled “スワール変換(Swirl Transformation)”渦巻き状の歪み。中心からの距離に応じて回転角を大きくする
ツワール変換(Twirl Transformation)
Section titled “ツワール変換(Twirl Transformation)”渦巻き状のねじれ。極座標で回転角を半径に比例させる。
フィッシュアイ変換
Section titled “フィッシュアイ変換”2次元極座標における半径変換。中心付近拡大、周辺圧縮の魚眼レンズ効果
中心付近をつぶす・膨らませる歪み。 で収縮, で拡大
リップル変換
Section titled “リップル変換”画像を波打たせる歪み 波動状の効果
ドロステ変換
Section titled “ドロステ変換”- 複素平面上でのへの変換
- 三段階(対数変換・平行移動/回転・指数変換)を繰り返し適用することでフラクタル状の効果を生む変換
step1. 対数変換
Section titled “step1. 対数変換”step2. 平行移動と回転・スケーリング
Section titled “step2. 平行移動と回転・スケーリング”- は拡大縮小率、 は回転角
step3. 指数変換
Section titled “step3. 指数変換”をふたたび通常空間に戻す
例1:単純な回転スパイラル
Section titled “例1:単純な回転スパイラル”- わずかに縮小しながら回転する自己相似パターンが出現
例2:中心をずらした自己相似形
Section titled “例2:中心をずらした自己相似形”- 中心をずらしつつ回転・縮小を繰り返し、ずれた中心を軸とする自己相似形が形成
ハウスホルダー反射
Section titled “ハウスホルダー反射”ベクトルに対する鏡映。任意の超平面に対する反射を実現
ローレンツ変換で現れる。拡張・ワープなどに応用。
ケイリー変換
Section titled “ケイリー変換”上半平面と単位円を等角写像。双曲幾何などで重要
バイリニア変換
Section titled “バイリニア変換”制御理論やDSPで -変換に用いられる。メビウス変換の特別な形。
メルリン変換
Section titled “メルリン変換”スケーリング不変性をもつ積分変換 画像認識やスケール解析に応用例
パラメータせん断変換
Section titled “パラメータせん断変換”平行四辺形化の歪みを与える アフィン変換の部分要素
円形パターンや回転対称表現で便利
バイケル変換
Section titled “バイケル変換”カオス的混合を示す1次元写像 フラクタル理論・エントロピー解析
2次元力学系のカオスアトラクタを生む写像
ニュートン反復
Section titled “ニュートン反復”方程式の数値解法、繰り返し描画でNewtonフラクタを生成
フレネル変換
Section titled “フレネル変換”光学系の回折・干渉計算に登場 波動光学シミュレーション
リース変換 (Riesz Transform)
Section titled “リース変換 (Riesz Transform)”多次元信号の微分特性や方向成分抽出に使われる 画像勾配評価など
クロスレシオ変換 (Cross-Ratio)
Section titled “クロスレシオ変換 (Cross-Ratio)”4点で定義される射影不変量 透視歪み補正などで応用
ガボール変換
Section titled “ガボール変換”時間-周波数局在化の解析 音声・画像のローカル周波数分析
アポロニウス変換
Section titled “アポロニウス変換”メビウス変換の一形態 円を円に写す等角写像
画像空間上の直線・曲線をパラメータ空間で検出 エッジ抽出・形状解析
2D関数を直線積分で表す CTスキャンなど断層画像再構成に必須
ウェーブレットとSTFTを合わせたような時間周波数解析 局所化と周波数解像度の両立
アポロニアンガスクローク変換
Section titled “アポロニアンガスクローク変換”具体的完全式は複雑 異なるサイズの円を連鎖的に埋め込む ロジックはアポロニウス円束の変換に基づく
ヌッジド・エラスティック・バンド (NEB) 変換
Section titled “ヌッジド・エラスティック・バンド (NEB) 変換”固体物理や化学反応経路探索のアルゴリズムでの写像発想 バンド(一連の状態)をエネルギー勾配で変形 数学的には座標系を補間しながら最短経路を求める
フーリエ変換
Section titled “フーリエ変換”時空間と周波数空間の間を結ぶ代表的積分変換
離散コサイン変換
Section titled “離散コサイン変換”JPEGなど画像圧縮の基礎
ウェーブレット変換
Section titled “ウェーブレット変換”局所的周波数成分解析 多重解像度解析やノイズ除去で活躍
ヒルベルト変換
Section titled “ヒルベルト変換”実部・虚部の関係を構築 信号の包絡線や瞬時位相に利用
離散信号を多項式表現する変換。フィルタ設計などで必須。
ラプラス変換
Section titled “ラプラス変換”連続信号の解析や微分方程式解法に用いられる GLSLには直接関係薄いが数理基礎
- 地図投影のユースケース - リーマン球面からの変換
- 平面図形を複素平面上の図形だとみなし、それをメビウス変換する。
- メビウス変換された図研は複素平面上に投影される
- 複素平面上の図形をリーマン球面に投影する
- リーマン球面を地図投影で四角形に再投影する
- それをpngファイルに落とす
- g-sandboxのbranch 8で大方実装。メビウス変換のパラメータもJSONで入出力可能
- 水面の歪みよりかなり激しく歪んだ状態
- ランベルト正積図法で実装しているはず
メルカトル投影
Section titled “メルカトル投影”地理座標(経度,緯度)を等角投影。高緯度ほど拡大
vec2 mercatorProjection(vec2 lonLat) { float x = lonLat.x / 3.141592653589793; float y = log(tan(3.141592653589793 / 4.0 + lonLat.y / 2.0)) / 3.141592653589793; return vec2(x, y);}球面上の点を正投影 (地図投影の一種)。中心からの直線を平面に下ろす
vec2 orthographicProjection(vec3 spherePos) { return spherePos.xy;}ランベルト正積図法
Section titled “ランベルト正積図法”面積を保つ地図投影。緯度、基準緯度、経度
vec2 lambertProjection(vec2 lonLat) { float x = lonLat.x / 3.141592653589793; float y = sin(lonLat.y); return vec2(x, y);}射影変換 (Projective Transformation)
Section titled “射影変換 (Projective Transformation)”ここで行列 は 3×3 の実(または複素)行列で、同次座標を使った写像を表す。 「」は同次座標系ではスカラー倍が同じ点を表すことを意味する。
1. の具体形とコードへの落とし方
Section titled “1. HHH の具体形とコードへの落とし方”- 一般的な 2D 射影変換は、3×3 行列
を用いて定義される。
- 射影変換をプログラムで実装するときは、通常「行列 × ベクトル」の形で計算し、最後に「同次座標の正規化」を行う。
- 座標 を拡張して とし、これに をかける:
vec3 p = H * vec3(x, y, 1.0); // Hはmat3型(もしくはmat3x3)// p.xy は [x', y']の同次座標// p.z が 0 でないことを仮定// 同次座標の正規化float w = p.z;// 実際の (x', y') は (p.x / w, p.y / w)- GLSL 例:
// uniform mat3 H;vec3 p_in= vec3(x, y, 1.0);vec3 p_out = H * p_in;
// p_out.z != 0 であると仮定vec2 xy_out = p_out.xy / p_out.z;- これにより
(x, y)→(x'/w, y'/w)となる。 - 視点変換や四隅指定による画像の台形補正、遠近法などに応用できる。
バイリニア変換とメビウス変換・アポロニウス変換
Section titled “バイリニア変換とメビウス変換・アポロニウス変換”1. メビウス変換
Section titled “1. メビウス変換”メビウス変換 (Mobius transformation) は、複素数平面上で
の形をとる写像。
- 複素平面上で「直線・円を直線・円へ写す」という特徴を持つ (「円・直線の保存」)。
- パラメータ は複素数でもよく、実の場合は実平面内での円(または直線)を保つ。
- 等角写像となる場合が多く、球面(リーマン面)との対応などでも基本的。
2. アポロニウス変換
Section titled “2. アポロニウス変換”アポロニウス変換 (Apollonius transformation) も
という メビウス変換の一種。 文献によっては「円を別の円に写す変換」を指してアポロニウス変換と呼ぶが、実は メビウス変換全般 が「円や直線を円か直線に写す」性質を持つため、両者はほぼ同じ範疇。
- 場合によっては「ある特定の実数制約」(実軸上の2点を不動点にする など) を課したメビウス変換をアポロニウス変換と呼ぶこともある。
- よって「アポロニウス変換 ⊂ メビウス変換」と理解してよい。
3. バイリニア変換
Section titled “3. バイリニア変換”「バイリニア変換 (Bilinear transform)」は、制御理論や信号処理 (特に -変換) で有名な
の形を指す。
- 数学的には「メビウス変換」と同じ形式 (係数 が実数の場合が多い)。
- 特に 信号処理 において、「-平面」(連続系) と「-平面」(離散系) を対応させる変換として使われる場合に「バイリニア変換」と呼ぶ。
- たとえば などと書いた形も「メビウス変換」の部分的実装例。
何が「特別」か
Section titled “何が「特別」か”- メビウス変換:複素数平面全体で円・直線を円・直線へ写す,一般の等角写像
- アポロニウス変換:メビウス変換の中でも「特定の条件下で円を円に写す」と強調するときの呼び方 (本質的には同じ)
- バイリニア変換:応用分野(信号処理など)で「メビウス変換の係数が実数 or ラプラス変数との対応が決まっている」場合の呼称。式そのものはメビウスと同型だが,「 と 」の関係に特化しているところが「特別」
結局のところ,
- 式:
- 総称: メビウス変換 (特に複素解析)
- 別名: アポロニウス変換 (幾何学的性質を強調)
- バイリニア変換: 信号処理・制御分野での実数係数版の実用呼称
同じ枠組みだが,「どの観点(幾何学・複素解析・制御理論)で見るか」で名称が変わっている。