レヴィC曲線のソースを表示
←
レヴィC曲線
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
'''レヴィC曲線(英:Lévy C curve、レヴィ曲線、レヴィ・ドラゴンとも呼ばれる)'''は、数学において最初に記述された[[自己相似]][[フラクタル]]である。その図形の[[微分可能関数|微分可能性]]について1906年に[[アーネスト・チェザロ]]、1910年に{{仮リンク|ゲオルグ・フェイバー|de|Georg Faber (Mathematiker)|preserve=1}}によって分析されたが、現在では[[フランス]]の[[数学者]] [[ポール・レヴィ (数学者)|ポール・レヴィ]]の名前を冠している、彼はその図形の自己相似性について初めて言及し、[[コッホ曲線]]と同じ種類の代表的な曲線として幾何学的な構造を規定した。 これは、特殊な倍周期曲線、{{仮リンク|ド・ラーム曲線|en|De Rham curve|preserve=1}}である。 == Lシステムによる記述 == [[ファイル:Levy_C_construction.png|サムネイル|260x260ピクセル| 図1 レヴィC曲線(Lシステムの8段階まで) ]] [[ファイル:Levy_C_Curve.svg|サムネイル|260x260ピクセル| レヴィC曲線(Lシステムの12段階後) ]] [[L-system|Lシステム]]を使用する場合、C曲線の作成は直線から始める。 この線を斜辺として使用して、45°、90°、45°の角度の[[二等辺三角形]]を作成する。元の線は、この三角形の他の2つの辺に置き換えられる(図1の2段階まで)。 次の段階で、2つの新しい線は、それぞれ別の直角二等辺三角形の底辺を形成し、それぞれの三角形の二等辺に置き換えられる。したがって、2段階後、曲線は元の線と同じ長辺で、半分の短辺の長方形のコの字型の図形となる(図1の3段階まで)。 後続の各段階で、曲線の各直線部は、その直線部を底辺として構築された直角二等辺三角形の二等辺に次々と置き換えられる。''n''段階後、曲線は2 <sup>''n''</sup>の線分で構成され、各線分は元の線より2 <sup>''n'' / 2</sup>倍小さくなる(図1の4段階以降)。 このLシステムは次のように記述できる。 {| | '''変数''' : |{{Mono|F}} |- | '''定数''' : |{{Mono|+ −}} |- | '''開始''' : |{{Mono|F}} |- | '''置換規則''' : |{{Mono|F → +F−−F+}} |} ここで " {{Mono|F}} "は「前方への直線」を意味し、「+」は「時計回りに45°回転」を意味し、「 − 」は「反時計回りに45°回転」を意味する。 この「無限」プロセスの極限であるフラクタル曲線は、レヴィC曲線と呼ばれる。その名前は、アルファベットの文字「C」に類似していることに由来し、その文字が装飾された状態のものを特にレヴィC曲線と称している。 この曲線は、「[[ピタゴラスの木]]」によく似ている。 C曲線の[[ハウスドルフ次元]]は2に等しい(開集合を含む)が、境界の次元は約1.9340である[http://mathworld.wolfram.com/LevyFractal.html] 。 === バリエーション === 標準的なC曲線は、45°の二等辺三角形を使用して作成される。C曲線のバリエーションは、45°以外の角度の二等辺三角形を使用して作成することができる。 角度が60°未満である限り、各段階で導入される新しい線は、それぞれが置き換える線よりも短いので、構築プロセスは極限曲線に向かう傾向となる。45°未満の角度では、「カール」が少なくなるフラクタルが生成される。 == 反復関数系(IFS)による記述 == [[ファイル:Lévy's_C-curve_(IFS).jpg|サムネイル|200x200ピクセル| レヴィC曲線(IFSによる、極限レベル) ]] [[反復関数系|反復関数システム]] (IFS、または事実上の[[カオスゲーム|カオスゲームの]] IFS手法)を使用する場合、C曲線の構築はやや簡単である。 これには、二つの「規則」を必要とする、すなわち、[[平面]]上の2つの点が、それぞれ[[スケール因子]] の1/{{Radic|2}}と関連付けられる。第1の規則は45°の回転、第2の規則は -45°の回転である。この規則が、ある点[''X'', ''y'' ]に対し反復的に実行される、このときに2つの規則がランダムに選択適用され、回転と拡大縮小の規則に関連付けられたパラメーターが用いられる、そして2次元の変換関数によりC曲線に対応する点が得られる。 複素数を使用すると、IFSは以下のように表せる。 : <math>f_1(z)=\frac{(1-i)z}{2}</math> : <math>f_2(z)=1+\frac{(1+i)(z-1)}{2}</math> 初期値は <math>S_0 = \{0,1\}</math> また実数を使用したIFSでも記述できる<ref name=":0">{{Cite web|title=Levy Dragon|url=http://larryriddle.agnesscott.org/ifs/levy/levy.htm|website=larryriddle.agnesscott.org|accessdate=2020-02-20}}</ref>。 <math>f_1(x,y) = \begin{bmatrix} \ 0.5 & \ -0.5 \ \\ 0.5 & \ 0.5 \end{bmatrix} \begin{bmatrix} \ x \\ y \end{bmatrix}</math> <math>f_2(x,y) = \begin{bmatrix} \ 0.5 & \ 0.5 \ \\ -0.5 & \ 0.5 \end{bmatrix} \begin{bmatrix} \ x \\ y \end{bmatrix} + \begin{bmatrix} \ 0.5 \\ 0.5 \end{bmatrix}</math> 上記の式を展開すると、以下の式が得られる。これらの関数を反復的に計算してプロットするとレヴィC曲線を描画できる<ref>{{Cite web|和書|url=https://jp.ricoh.com/-/Media/Ricoh/Sites/jp_ricoh/technology/techreport/24/fractal/HTML/FRACTAL.pdf|title=反復関数集合によるフラクタル画像生成|accessdate=2020-02-21}}</ref>。 ''ƒ''<sub>1</sub> : ''x'' <sub>''n'' + 1</sub> = 0.5 ''x'' <sub>''n''</sub> - 0.5 ''y'' <sub>''n''</sub> : ''y'' <sub>''n'' + 1</sub> = 0.5 ''x'' <sub>''n''</sub> + 0.5 ''y'' <sub>''n''</sub> ''ƒ''<sub>2</sub> : ''x'' <sub>''n'' + 1</sub> = 0.5 ''x'' <sub>''n''</sub> + 0.5 ''y'' <sub>''n''</sub> + 0.5 : ''y'' <sub>''n'' + 1</sub> = −0.5 ''x'' <sub>''n''</sub> + 0.5 ''y'' <sub>''n''</sub> + 0.5<br /> == コンピュータによる生成 == === プログラム構文例 === <syntaxhighlight lang="java"> // Java Sample Implementation of Levy C Curve import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; import java.util.concurrent.ThreadLocalRandom; public class C_curve extends JPanel { public float x, y, len, alpha_angle; public int iteration_n; public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; c_curve(x, y, len, alpha_angle, iteration_n, g2d); } public void c_curve(double x, double y, double len, double alpha_angle, int iteration_n, Graphics2D g) { double fx = x; double fy = y; double length = len; double alpha = alpha_angle; int it_n = iteration_n; if (it_n > 0) { length = (length / Math.sqrt(2)); c_curve(fx, fy, length, (alpha + 45), (it_n - 1), g); // Recursive Call fx = (fx + (length * Math.cos(Math.toRadians(alpha + 45)))); fy = (fy + (length * Math.sin(Math.toRadians(alpha + 45)))); c_curve(fx, fy, length, (alpha - 45), (it_n - 1), g); // Recursive Call } else { Color[] A = {Color.RED, Color.ORANGE, Color.BLUE, Color.DARK_GRAY}; g.setColor(A[ThreadLocalRandom.current().nextInt(0, A.length)]); //For Choosing Different Color Values g.drawLine((int) fx, (int) fy, (int) (fx + (length * Math.cos(Math.toRadians(alpha)))), (int) (fy + (length * Math.sin(Math.toRadians(alpha))))); } } public static void main(String[] args) { C_curve points = new C_curve(); points.x = 200; // Stating x value points.y = 100; // Stating y value points.len = 150; // Stating length value points.alpha_angle = 90; // Stating angle value points.iteration_n = 15; // Stating iteration value JFrame frame = new JFrame("Points"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(points); frame.setSize(500, 500); frame.setLocationRelativeTo(null); frame.setVisible(true); } } </syntaxhighlight> === 表計算ソフトの例 === さきの反復関数系を使用し、バーンズリーらにより示されたランダム・アルゴリズム<ref name="Fractals">[https://wwwf.imperial.ac.uk/~jswlamb/M345PA46/%5BB%5D%20chap%20IX.pdf p370,"8 Application to Computer Graphics", Fractals Everywhere], Boston, MA: Academic Press, 1993, {{ISBN2|0-12-079062-9}}</ref><ref>{{Cite web|title=Fractal Geometry|url=http://www.math.union.edu/~framem/AprilWorkshop/IFS/RandIFS/RandIFS.html|website=www.math.union.edu|accessdate=2020-02-18}}</ref>を適用することでもレヴィC曲線を描画できる。 <br />すなわち、反復関数''ƒ''<sub>1</sub>、''ƒ''<sub>2</sub>をそれぞれ50%の確率でランダムに選択し、反復的に計算を実行すればよい<ref name=":0" />。以下に表計算ソフトの入力例を示す。 [[ファイル:Levy C curve.jpg|代替文=|サムネイル|230x230ピクセル|表計算ソフトで作成したレヴィC曲線、2万のXYデータの散布図]] {| class="wikitable" style="text-align:center; width:60%" ! !A !B !C !D !E !F !G !H |- style="background-color:#dfd" !1 |IFS |a |b |c |d |e |f |p |- style="text-align:center" !2 | style="background-color:#dfd" |ƒ1 |0.5 | -0.5 |0.5 |0.5 |0 |0 |0.5 |- style="text-align:center" !3 | style="background-color:#dfd" |ƒ2 |0.5 |0.5 | -0.5 |0.5 |0.5 |0.5 | |- style="text-align:center; background-color:#fdd" !4 |random |ƒ |X |Y | | | | |- style="text-align:center" !5 | | |0 |0 | | | | |- style="text-align:center" !6 |=RAND() |B8 |C8 |D8 | | | | |} なお、B8,C8,D8のセルには以下のような条件判定の関数を入力する。 * B8=IF(A6<($H$2),1,2) * C8=IF(B6=1,$B$2*C5+$C$2*D5+$F$2,$B$3*C5+$C$3*D5+$F$3) * D8=IF(B6=1,$D$2*C5+$E$2*D5+$G$2,$D$3*C5+$E$3*D5+$G$3) 最終6行目をオートフィルで適当な行数だけコピーし、XY散布図とするとレヴィC曲線が得られる。各変換式ƒの係数a,b,c,d,e,fと確率pは任意に変更可能である。 各列は以下のような計算を行っている。 * A列:乱数を発生させる。 * B列:乱数をもとに確率pに応じた条件判定を行い、用いる変換ƒを決める。 * C列:先に決めた変換ƒに対応する計算をおこない、Xを求める。 * D列:先に決めた変換ƒに対応する計算をおこない、Yを求める。 * 新たなXとYは前の行のXとYの値を使用し、反復的に計算を進める。 == 脚注 == {{脚注ヘルプ}} <references /> == 参考文献 == {{Commons|Lévy C curve}} * Paul Lévy, ''Plane or Space Curves and Surfaces Consisting of Parts Similar to the Whole'' (1938), reprinted in ''Classics on Fractals'' Gerald A. Edgar ed. (1993) Addison-Wesley Publishing {{ISBN2|0-201-58701-7}}. * E. Cesaro, ''Fonctions continues sans dérivée'', Archiv der Math. und Phys. '''10''' (1906) pp 57–63. * G. Faber, ''Über stetige Funktionen II'', Math Annalen, '''69''' (1910) pp 372–443. * S. Bailey, T. Kim, R. S. Strichartz, ''Inside the Lévy dragon'', ''American Mathematical Monthly'' '''109(8)''' (2002) pp 689–703 == 関連項目 == * [[ドラゴン曲線]] * [[ピタゴラスの木]] {{Fractals}} {{デフォルトソート:れういCきよくせん}} [[Category:アフィン幾何学]] [[Category:フラクタル]] [[Category:数学のエポニム]]
このページで使用されているテンプレート:
テンプレート:Cite web
(
ソースを閲覧
)
テンプレート:Commons
(
ソースを閲覧
)
テンプレート:Fractals
(
ソースを閲覧
)
テンプレート:ISBN2
(
ソースを閲覧
)
テンプレート:Mono
(
ソースを閲覧
)
テンプレート:Radic
(
ソースを閲覧
)
テンプレート:仮リンク
(
ソースを閲覧
)
テンプレート:脚注ヘルプ
(
ソースを閲覧
)
レヴィC曲線
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報