HN 日本語サマリー

← 一覧へ戻る
科学・技術

フーリエ解析:円を使ってラマを描く

Fourier Analysis: Drawing Llamas with Circles (adekau.github.io)

79 pointsby cebert11 コメント

要約

この記事では、フーリエ解析を用いて複雑な図形を描画する手法について解説しています。時間領域の信号を周波数領域に変換するフーリエ変換の概念を応用し、複数の回転する円(エピサイクル)を組み合わせることで、線、四角形、魚、さらにはラマのような複雑な形状を描き出す方法を示しています。数学的な背景として、複素数と線形代数の概念にも触れ、フーリエ変換の仕組みを直感的に理解できるように説明しています。

全文翻訳

フーリエ解析:円を使ってラマを描く¶ フーリエ変換は、入力信号を時間領域から周波数領域に変換する方法です。例えば、オーディオエンジニアはフーリエ変換を使って曲中の個々の不要な周波数成分を特定し、逆フーリエ変換でその周波数を除いた音に戻すことができます。デジタル画像処理では、フーリエ変換を画像のフィルタリング(ガウシアンブラーなど)やJPEG形式での画像圧縮に利用できます。そして、この記事で詳しく説明するように、描画にも応用できます。 描画とはどういうことでしょうか?それは、鉛筆を紙に下ろし、一度も持ち上げずに完成させることで描ける魚、パイ記号、あるいはほとんど何でも表すパス(経路)を取るという考え方です。このパスを使って、異なる周波数で回転する円のベクトルを先端から先端へとつなぎ合わせると、最後のベクトルの先端が元のスケッチ、少なくともそれに非常によく似たものを描き出します。 以下に、私が言っていることの例をいくつか示します。 図 1 円で直線を描く¶ 直線とは全く反対のような形状を使って、直線を描くことができます。円を調整することで、描かれる形状を変更できます。例えば、外側の円の半径を小さくし、回転速度を速くすることで、四角形を描くことができます。 図 2 四角形¶ では、3つ目の円を追加するとどうなるでしょうか?これにより、曲線がより洗練されたものになります。3つ目の円を使うと、魚のような曲線を描くことができます。 図 3 魚¶ 他の円に接続された円だけを使って可能なことの、より極端な例として、ここでは異なる周波数、半径、開始角度を持つ1024個の円を使用して描画されているラマを示します。一般に、(ほとんどの)閉じた曲線は、エピサイクルと呼ばれる円を使って描くことができます。 図 4 ラマ?!¶ 一般に、円を追加すればするほど、より複雑な描画を生成できます。また、同じ描画に対して円を追加すればするほど、元の「入力」描画に似るようになります。そのアニメーションが何を生み出しているのかを理解するためには、フーリエ変換(および級数)の背後にある数学と直感のいくつかを掘り下げる必要があります。 前述のように、異なる曲線を描くために調整できる円の条件は3つあります。それらは、回転する速度(周波数)、円の大きさ(半径)、そして開始角度(位相)です。これら3つの条件はすべて、単一の複素数で表すことができます。以下に、円を追加することの効果を視覚化できるインタラクティブな例を示します。 フーリエ変換¶ しかし、まず、フーリエ変換が何であるかについて簡単に概説する必要があります。それは時間領域から周波数領域への変換です。これはどういう意味でしょうか?関数 {sin(2π×3t)} がある場合、その {sin(2π×3t)} 関数のフーリエ変換は、周波数 {±3hz} に単一のスパイクを持つだけです。 図 5 {sin(2π×3t)} のグラフ¶ 図 6 周波数領域における {sin(2π×3t)} の大きさ¶ 予想通り、周波数 {3hz} と {-3hz} にスパイクがあります。基本的に、私たちがやっていることは、欲しいものに含まれる周波数を見つけ、それらのサイン波を組み合わせて元のものの近似を作成することです。次のいくつかのセクションで、フーリエ変換がどのように機能するかを示そうとします。 複素数¶ このセクションでは、複素数が何であるかについて簡単に復習します。すでに慣れている場合はスキップできます。複素数は、実数部と虚数部の2つの部分で構成されます。これは、私たちがすでに慣れている数に、表現するための別の軸を追加するようなものです。複素数は {3+4i} と書かれ、ここで {3} が実数部、{4i} が虚数部です。これら2つの別々の部分は、加算されて複素数を形成します。ここで役立つもう1つの複素数の特性は、それらを実数部が {x}、虚数部が {y} である2次元ベクトル、つまり標準的な点 {(x, y)} として簡単に考えることができることです。この表現は、三角法と複素指数関数の関連性から、ここで非常に便利です。両者をつなぐ公式は、オイラーの等式として知られています。これは記事の後のセクションでさらに詳しく説明します。 線形代数¶ 線形代数は、円で回転するベクトルを使って絵を描く方法を理解する上で重要な概念です。具体的には、ベクトルを他のベクトルでどのように表現できるかです。標準的な2次元 {(x, y)} ユークリッド空間では、すべてのベクトルを単位ベクトル {x} と {y} で表現できます。これらは通常、{i-hat} と {j-hat} と呼ばれ、{i-hat} = {(1, 0)} (x軸)および {j-hat} = {(0, 1)} (y軸)です。これを行うには、2つの操作を使用できます:スカラーによる乗算と加算。例えば、ベクトル {a} = {(5, -8)} は次のように表すことができます。 {a} = 5 {⋅} {i-hat} - 8 {⋅} {j-hat} = 5 {⋅} {(1, 0)} + -8 {⋅} {(0, 1)} = {(5, 0)} + {(0, -8)} = {(5, -8)} このスカラーによる乗算とベクトルの加算によって別のベクトルを生成することは、ベクトルの集合の線形結合として知られています。この例では、そのベクトルの集合は単位ベクトル {i-hat} と {j-hat} です。 図 7 2つのベクトル、{u} と {v}、それらの間の角度は90°、両方の長さは1¶ しかし、{i-hat} と {j-hat} だけが他のベクトルを表現するために使用できるベクトルではありません。実際、2つのベクトルが互いの倍数でない限り、それらをスケーリングして加算することで任意の他のベクトルを形成できます。例えば、{(1, -1)} と {(-2, 2)} は有効ではありません。なぜなら {(-2, 2)} = -2 {×} {(1, -1)} だからです。 上の図では、長さが1で直交する(それらの間に90°の角度がある)ベクトル {u} = {(1/√2, 1/√2)} と {v} = {(-1/√2, 1/√2)} があります。これらのベクトルのどちらも、もう一方と等しくなるようにスケーリングできないため、線形独立であり、したがって2次元空間全体の基底ベクトルとすることができます。 ドット積(または内積とも呼ばれる)は、選択したベクトルに関してそれらを表現するために、どの数値でベクトルをスケーリングするかを決定する方法です。上の図のベクトル {w} = {(0.7, 1.2)} をベクトル {u} と {v} で表現するには、線形結合 {w} = c₁ {⋅} {u} + c₂ {⋅} {v} を形成するために、それらをどの数値で乗算するかを決定する必要があります。具体的には、ドット積から必要な数値は定数乗数 c₁ と c₂ です。 この概念の別の考え方は、ドット積が「{w} の中に {u} はどれだけ含まれているか?」という質問に答えるということです。この直感は、後にフーリエ変換の背後にある数学に入るときに重要になります。いずれにせよ、{w} のドット積を {u} と取ることで c₁ を見つけることができます。順序は関係ないことにも注意してください(例:{⟨u, w⟩} = {⟨w, u⟩})。 c₁ = {⟨u, w⟩} = ({u}ₓ {×} {w}ₓ) + ({u}y {×} {w}y) = ({1/√2} {×} 0.7) + ({1/√2} {×} 1.2) = 1.3435 したがって、{u} を 1.3435 の係数でスケーリングする必要があります。