TOP > n.s.研究所 > ライブラリ > VisualC++ > 計算物理学

ライブラリ

計算物理学
コッホ曲線を描く

文責:遠藤 理平 (2008年12月13日) カテゴリ:日誌計算物理学

コッホ曲線とは

コッホ曲線(von Koch curve)とは、それぞれの線分を3等分し、等分した2点を頂点とする正三角形を作図することを無限に繰り返すことで得られる図のことである。 コンピュータ上では、無限回繰り返すことは不可能なので、有限回繰り返した図を作図した結果は次のとおり。


コッホ曲線

n世代目のコッホ曲線を描く

コッホ曲線の任意の線分の$n-1$世代目と$n$世代目のと関係式を導くことによって、任意の世代におけるコッホ曲線を漸化式で得る(図\ref{fig:koho-1})。


n世代のコッホ曲線

$n$世代の$m$番目の頂点の位置ベクトルを$x^{(n)}_m$とする場合、$n-1$世代と$n$世代の関係式は次の通りとなる。



${\bf r}^{n}_m$は$n$世代目における、左から$m$番目の線分のベクトルを表し、$R(\theta)$は回転行列である。 また、0世代目の線分の長さを$L$としたときの初期値は、線分の両端の位置ベクトル$x^{0}_0 =(0 \ 0)^{T}$、$x^{0}_1 =(L \ 0)^{T}$であたえられる($T$は転置行列の意)。

#include <math.h>
#include <fstream>
#include <iostream>
#include <string> 
using namespace std;

//ファイル出力
//ofstream ofs1( "kohho1.data" );
int main()
{
	double PI = 3.14159265358979323846;

	double x[7][4100][2];
	x[0][0][0] = 0.0;
	x[0][0][1] = 0.0;
	x[0][1][0] = 100.0;
	x[0][1][1] = 0.0;
	int max_n = 6 ;
	for(int n =1 ; n<=max_n ; n++){
		for(int m = 0; m < int(pow(4.0, n))/4 ; m++){
			x[n][4*m][0] = x[n-1][m][0];
			x[n][4*m][1] = x[n-1][m][1];
			x[n][4*m+1][0] = x[n-1][m][0] + 1.0/3.0 * (x[n-1][m+1][0] - x[n-1][m][0]) ;
			x[n][4*m+1][1] = x[n-1][m][1] + 1.0/3.0 * (x[n-1][m+1][1] - x[n-1][m][1]) ;
			x[n][4*m+2][0] = x[n][4*m+1][0] + 1.0/3.0 * ( cos(PI/3.0) * (x[n-1][m+1][0] - x[n-1][m][0]) - sin(PI/3.0) * (x[n-1][m+1][1] - x[n-1][m][1]) ) ;
			x[n][4*m+2][1] = x[n][4*m+1][1] + 1.0/3.0 * ( sin(PI/3.0) * (x[n-1][m+1][0] - x[n-1][m][0]) + cos(PI/3.0) * (x[n-1][m+1][1] - x[n-1][m][1]) ) ;
			x[n][4*m+3][0] = x[n-1][m][0] + 2.0/3.0 * (x[n-1][m+1][0] - x[n-1][m][0]) ;
			x[n][4*m+3][1] = x[n-1][m][1] + 2.0/3.0 * (x[n-1][m+1][1] - x[n-1][m][1]) ;
			x[n][4*m+4][0] = x[n-1][m+1][0];
			x[n][4*m+4][1] = x[n-1][m+1][1];
		}
		x[n][int(pow(4.0, n))][0] = x[n-1][int(pow(4.0, n-1))][0];
		x[n][int(pow(4.0, n))][1] = x[n-1][int(pow(4.0, n-1))][1];

		char sh[10];
		string kk,kk0 = "";
		sprintf(sh, "%d", n);
		kk = kk0 + "Koch" + sh + ".data";
		ofstream ofs1( kk.c_str() );
		for(int i=0; i<= int(pow(4.0, n));i++ ){
			ofs1.precision(5);
			ofs1 << x[n][i][0]  << " " << x[n][i][1] << endl;
		}
		cout << n << endl;
	}
}

今後の予定

フラクタル次元についてまとめる

(タグ:

■現在のカテゴリ: ライブラリ > VisualC++ > 計算物理学

ライブラリ

LabVIEWを使った物理数学集

VisualC++


▲このページのトップn.s.研究所 トップ

関連記事

日誌


計算物理学


▲このページのトップn.s.研究所 トップ

n.s.研究所

About n.s.研究所

Activity 活動予定

Thema 研究テーマ

単細胞生物の行動に関する研究

多細胞生物の行動に関する研究

社会性昆虫の行動に関する研究

人の認識に関する研究

環境に関する研究

Thema 開発テーマ

ロボットの開発

作ってみた

Lecture 講義

コンピュータ・サイエンス講座

マイコン・サイエンス講座

Library ライブラリ

LabVIEWを使った物理数学集

VisualC++

Report 報告

学会等での発表

論文発表

その他の報告




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました