数学において、レヴィC曲線は自己相似性 フラクタル曲線であり、 1906年にエルネスト・チェザロ、 1910年にゲオルク・ファーバーによって初めて記述され、その微分可能性が分析されたが、現在ではフランスの数学者ポール・レヴィの名を冠している。レヴィは、この曲線の自己相似性特性を初めて記述し、コッホ曲線と同類の代表的な曲線であることを示す幾何学的構成を提示した人物である。これは周期倍加曲線、ド・ラーム曲線の特殊なケースである。
Lシステム構築


リンデンマイヤー法を用いる場合、C曲線の作成は直線から始まります。この直線を斜辺として、45°、90°、45°の角度を持つ二等辺三角形を作成します。次に、元の直線をこの三角形の他の2辺で置き換えます。
第二段階では、2本の新たな線がそれぞれ別の直角二等辺三角形の底辺となり、それぞれの三角形の他の2辺に置き換えられます。そのため、2段階を経て、曲線は元の線と同じ長さで幅が半分の長方形の3辺のような外観になります。
以降の各段階では、曲線の各直線部分は、その上に構築された直角二等辺三角形の他の2辺に置き換えられます。n段階を経て、曲線は2 n個の線分で構成され、各線分は元の線分よりも2 n /2倍小さくなります。
この L システムは次のように説明できます。
| 変数: | F |
| 定数: | + − |
| 始める: | F |
| ルール: | F → +F−−F+ |
ここで、「F」は「前方に引く」、「+」は「時計回りに 45° 回転する」、「−」は「反時計回りに 45° 回転する」を意味します。
この「無限」過程の極限となるフラクタル曲線が、レヴィC曲線です。この曲線は、高度に装飾された文字「C」に似ていることからその名が付けられました。この曲線は、ピタゴラスの樹の細部を彷彿とさせます。
C曲線のハウスドルフ次元は2(開集合を含む)であるが、境界の次元は約1.9340である[1]。
バリエーション
標準的なC曲線は、45°の二等辺三角形を用いて構築されます。C曲線のバリエーションは、45°以外の角度を持つ二等辺三角形を用いて構築できます。角度が60°未満である限り、各段階で新たに導入される線はそれぞれ、置き換えられる線よりも短くなるため、構築過程は極限曲線に近づく傾向があります。45°未満の角度では、それほど強く「カール」していないフラクタルが生成されます。
IFS建設
.jpg/440px-Lévy's_C-curve_(IFS).jpg)
反復関数システム(IFS、または実際にはカオスゲームIFS法)を使用する場合、C曲線の構築は少し簡単になります。2つの「ルール」のセットが必要です。平面上の2つの点(トランスレータ)で、それぞれに1/ √2のスケール係数が関連付けられています。最初のルールは45°の回転、2番目のルールは-45°の回転です。このセットは、2つのルールのいずれかをランダムに選択して点[ x、 y ]を反復し、ルールに関連付けられたパラメータを使用して、2D変換関数を使用して点のスケール/回転と移動を行います。
数式に当てはめると:
初期の点集合から。
Levy C 曲線のサンプル実装
// レヴィC曲線のJavaサンプル実装
java.awt.Colorをインポートします。java.awt.Graphicsをインポートします。java.awt.Graphics2Dをインポートします。javax.swing.JFrameをインポートします。javax.swing.JPanelをインポートします。java.util.concurrent.ThreadLocalRandomをインポートします。
パブリッククラスC_curveはJPanelを拡張します{
パブリックfloat x 、y 、len 、alpha_angle ;パブリックint iteration_n ;
パブリック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 ); // 再帰呼び出し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 ); // 再帰呼び出し} else { Color [] A = { Color . RED , Color . ORANGE , Color . BLUE , Color . DARK_GRAY }; g . setColor ( A [ ThreadLocalRandom . current (). nextInt ( 0 , A
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 ; // x 値を記述points . y = 100 ; // y 値を記述points . len = 150 ; // 長さ値を記述points . alpha_angle = 90 ; // 角度値を記述points . iteration_n = 15 ; // 反復値を記述
JFrame frame = new JFrame ( "Points" ); frame . setDefaultCloseOperation ( JFrame . EXIT_ON_CLOSE ); frame . add ( points ); frame . setSize ( 500 , 500 ); frame . setLocationRelativeTo ( null ); frame . setVisible ( true );
}
}
参照
参考文献
- ポール・レヴィ『平面または空間曲線と全体と相似な部分から成る面』(1938年)、ジェラルド・A・エドガー編『フラクタルの古典』(1993年)アディソン・ウェズリー出版ISBN 0-201-58701-7。
- E. Cesaro、Fonctions は sans dérivée、Archiv der Math を続けています。と物理学。10 (1906)、57–63 ページ。
- G. Faber、『Über stetige Funktionen II』、Math Annalen、69 (1910) pp 372–443。
- S. ベイリー、T. キム、RS ストリチャーツ、「レヴィ・ドラゴンの内側」、アメリカ数学月刊誌 109(8) (2002) pp 689–703