• 要点
  • 絵描き
  • イメージ
  • 数式
  • コード
  • 期末試験

ドラゴン曲線とは

学習の道標

目次
  • 要点:ポイントまとめ
  • 絵描き《文系》:イラストを描きました
  • イメージ《文系》:描かれ方の仕組みを分かる
  • 数式:定義式を知る
  • コード《情報系》:Pythonコードで描きます
  • 期末試験:2023年の12月に出題しました
参考文献

ヘイウェイドラゴン

集合 $\mathbb{D}_{n} \subset \mathbb{C}$ の極限集合はドラゴン曲線の一種である。

$$\mathbb{D}_{n} = f_1(\mathbb{D}_{n-1} ) \cup f_2( \mathbb{D}_{n-1} )$$

  • 初期集合 $\mathbb{D}_0 = \{ 0 , \, 1 \}$
  • $ \displaystyle f_1(z) = \frac{1 + i}{2}z$
  • $\displaystyle f_2(z) = 1 - \frac{1 - i}{2}z$

集合 $\mathbb{D}_{n}$ を第 $n$ 世代のヘイウェイ・ドラゴンと呼ぶ。

ドラゴン曲線のイラスト

ドラゴン曲線は、龍に見えるフラクタル図形のことです!

ドラゴン曲線さん

第11世代だよ。

ドラゴン曲線さん

白黒反転させてみたよ。

ドラゴン曲線さん

第21世代だよ。

ドラゴン曲線のイメージ

ドラゴン曲線の成長過程

第1世代

初めは2つの点と、1本の線分だけから始まります。

STEP
1

第2世代

黄色の線分が(さっきの)第1世代の曲線です。

黒い線分が、第2世代の曲線です。

STEP
2

第3世代

黄色の線分が(さっきの)第2世代の曲線です。

黒い線分が、新しい第3世代の曲線です。

STEP
3

第4世代

黒線部分が新しい第4世代のドラゴン曲線です。

STEP
4

第5世代

黒線部分が新しい第5世代のドラゴン曲線です。

STEP
5

第6世代

黒線部分が新しい第6世代のドラゴン曲線です。

こういった作業を繰り返して、ドラゴン曲線を成長させます。

STEP
6

ヘイウェイ・ドラゴンの描き方

前の世代の線分を2本に分けていきます。このとき、できあがった2本の線分は90度で交わるようにします。

2本の線分を作る向きがポイントで、前の世代の曲線に対して、左→右→左→右→・・・の順番で線分を増やしていきます。

第1世代→第2世代

STEP
1

第2世代→第3世代

STEP
2

第3世代→第4世代

STEP
3
ドラゴン曲線さん

この作業の繰り返しで、龍の形ができていくよ!

ドラゴン曲線の理解

反復関数系としての定義

定義

集合 $\mathbb{D}_{n} \subset \mathbb{C}$ の極限集合はドラゴン曲線の一種である。

$$\mathbb{D}_{n} = f_1(\mathbb{D}_{n-1} ) \cup f_2( \mathbb{D}_{n-1} )$$

  • 初期集合 $\mathbb{D}_0 = \{ 0 , \, 1 \}$
  • $ \displaystyle f_1(z) = \frac{1 + i}{2}z$
  • $\displaystyle f_2(z) = 1 - \frac{1 - i}{2}z$

定義内の $f_1(\mathbb{D}_{n-1} )$ と $f_2(\mathbb{D}_{n-1} )$ は,$f_1(\mathbb{D}_{n-1} )=\{ f_1(z) \mid z \in \mathbb{D}_{n-1} \}$ ,$f_2(\mathbb{D}_{n-1} )= \{ f_2(z) \mid z \in \mathbb{D}_{n-1} \}$ といった記号だよ。

定義

初期集合 $\displaystyle \mathbb{D}_0 = \{ 0 , \, 1 , \, 1-i \}$ と,複素関数 $f_1$ と $f_2$ から定義される集合 $\mathbb{D}_{n} \subset \mathbb{C}$ の極限集合はドラゴン曲線の一種である。

$$\mathbb{D}_{n} = f_1(\mathbb{D}_{n-1} ) \cup f_2( \mathbb{D}_{n-1} )$$

  • $ \displaystyle f_1(z) = \frac{1 + i}{2}z$
  • $\displaystyle f_2(z) = 1 - \frac{1 + i}{2}z$

$\mathbb{D}_{n}$ を第 $n$ 世代のツイン・ドラゴンと呼ぶ。

関数 $f_2$ 内の $z$ の係数が $\displaystyle \frac{1+i}{2}$ が異なる所だよ。

ドラゴン曲線のコード

ヘイウェイ・ドラゴンのPythonコード

import matplotlib.pyplot as plt
import numpy as np

#関数の定義
def doragon1(z1):
  f1 = (1+1j)/2*z1
  return f1
def doragon2(z2):
  f2 = 1- (1-1j)/2*z2
  return f2

# 世代
generation = 11

# 初期集合
doragon = {0, 1}

for i in range(generation-1):
  new_pts = set()

  # 反復計算
  for z in doragon:
    z1 = doragon1(z)
    z2 = doragon2(z)
    new_pts.add(z1)
    new_pts.add(z2)
  doragon = doragon.union(new_pts)
print(doragon)

# 実部と虚部の取得
real_values = [np.real(z) for z in doragon]
imag_values = [np.imag(z) for z in doragon]

# 複素数平面への図示
fig, ax = plt.subplots()
ax.scatter(real_values, imag_values, color='white', marker='*')
ax.axhline(0, color='white', linewidth=0.5)
ax.axvline(0, color='white', linewidth=0.5)

# 背景色を白に設定
fig.patch.set_facecolor('white')
ax.set_facecolor('black')

plt.grid(color = 'gray', linestyle = '--', linewidth = 0.5)
plt.xlabel('Real Axis')
plt.ylabel('Imaginary Axis')
plt.title('Doragon Curve')
plt.xlim([-0.4, 1.2])  # 横軸の範囲を設定
plt.ylim([-0.4, 0.75])  # 縦軸の範囲を設定
plt.show()

おまけ

偶然、綺麗な銀河系みたいな図ができました🐲🐲。

高3期末試験《2023年2学期》

理屈っぽい性格のAと感覚的な性格のBと,楽観的な後輩中学生のCが,塾で受験勉強している。

A:ねーね,この絵を見てよ。何に見える?私は桜に見えるかな。 

B:私は「竜です。」、竜に見えるよ♪

C:「ひき肉です。」

A:やっぱり勘がいいね。これは『ドラゴン曲線』って言うんだ。もっと詳しく言うと,この絵は『第13世代のドラゴン曲線』なんだ。

B:何それ?なんかカッコいいね!ドラゴンが成長してるってこと?

A:そうなんだ。この前,仕組みを勉強したから,教えるね。このドラゴン曲線は,はじめは2つの点からできてるんだ。複素数の $0$ と $1$ をスタートにして,$f_1$ と $f_2$ で全て変換した点達が次の世代のドラゴン曲線なんだよ。

$$f_1(z) = \frac{(1+i) \cdot z}{2}, \ \ f_2(z) = 1 - \frac{(1-i) \cdot z}{2}$$

B:この龍って、複素数の仕組みでできるんだー。不思議だ。フラクタルだな🎵

***

自然数 $n \geqq 2$ について,集合 $\mathbf{D}_n$ を,

$$\mathbf{D}_n = \{ f_1(d) \mid d \in \mathbf{D}_{n-1} \} \cup \{ f_2(d) \mid d \in \mathbf{D}_{n-1} \}$$

と定義する。は第 $n$ 世代のドラゴン曲線を表す(複素数の)点の集合である。

[問1]第1世代のドラゴン曲線の点の集合を $\mathbf{D}_1 = \{ 0, 1 \}$ とする。第2世代のドラゴン曲線の点の集合 $\mathbf{D}_2$ を求めよ。つまり,

$$\mathbf{D}_2 = \{ f_1(0), f_1(1) \} \cup \{ f_2(0), f_2(1) \}$$

を求めよ。

[問2]第3世代のドラゴン曲線の点の集合を$\mathbf{D}_3$ とする。第3世代の点(集合の要素)であって,かつ,第2世代の点(集合の要素)ではない複素数をすべて答えよ。

[問3]ドラゴン曲線の世代を成長させていく操作(関数)である $f_1$ と $f_2$ の図形的な意味として不適切なものを次から2つ選び,記号で答えなさい。【完答】

  1. $f_1$ は $\mathbf{D}_{n-1}$ の点を,原点中心に45°回転させ,大きさを 1/2 に縮め,$\mathbf{D}_n$ を作る
  2. $f_1$ は $\mathbf{D}_{n-1}$ の点を,原点中心に-315°回転させ,大きさを $1 / \sqrt{2}$ に縮め,$\mathbf{D}_n$ を作る
  3. $f_2$ は $\mathbf{D}_{n-1}$ の点を,原点中心に-45°回転させ,大きさを縮小させ,原点で対称移動させ,実軸方向に+1だけ平行移動して,$\mathbf{D}_n$ を作る
  4. $f_2$ は $\mathbf{D}_{n-1}$ の点を,原点中心に135°回転させ,大きさを縮小させ,実軸方向に+1だけ平行移動して,$\mathbf{D}_n$ を作る
  5. $f_2$ は $\mathbf{D}_{n-1}$ の点について,大きさを縮小させ,実軸方向に+1だけ平行移動をして,原点中心に-45°回転させて,$\mathbf{D}_n$ を作る

[問4]第4世代のドラゴン曲線の点の集合を $\mathbf{D}_4$ を複素数平面に表した図として,最も適切なものを①~④の中から1つ選べ。ただし,黒点が $\mathbf{D}_4$ の点を表す複素数である。 

***

B:このドラゴンに、名前をつけない?

A:良いアイデアだね。んーー。ヘイウェイ・ドラゴンって名前はどうかな。

B:かっこいい、名前だね。このドラゴンと一緒に遊んでみたいね。

A:もう1つ点を増やそうよ?例えば,$1-i$ っていう複素数を増やしみよう。

***

[問5]複素数 $1-i$ について,変換 $f_1$(関数)を何度も繰り返す。つまり,$a_1 = 1-i$, $a_2 = f_2(a_1)$, $a_3 = f_1(a_2)$, $a_4 = f_1(a_3)$, ..., を考える。このとき,$a_1, a_2, a_3 \ldots$ は,実軸上に周期的に存在する。17回目に実軸上に存在するのは,第何世代のドラゴン曲線のときであるか答えよ。

***

B:うわっ。ヘイウェイ・ドラゴンが2匹いるよ。

A:いま調べたけど,このフラクタル図形を「ツイン・ドラゴン」って言うんだね。

B:ほかにも、数学のカオスの世界には、「レヴィ・ドラゴン」「ゴールデン・ドラゴン」「テルドラゴン」と呼ばれる曲線がいるみたいだよ。 

<図の出典>アートで魅せる数学の世界,岡本健太郎,技術評論社

C:レビィ・ドラゴンは、画像の中心を原点とした複素数平面として $-i$ をかけると、筋肉モリモリみたいなイラストになるね💪

B:フラクタルは生物の多様性とも関係しそう?!たくさん勉強してみたいな🎵

A:「他人に促されなくても努力する人間が一番成長する」ってことだね!

B:ドラゴン桜みたいな台詞だね。

A・B・C:たくさん勉強やってるから、かならず合格できるね!

コメントをどうぞ