はいはいフラクタルフラクタル

今回はドラゴン曲線
ドラゴン曲線を考えた人はググっても出てきませんでしたw
できた形がドラゴンに似てるからドラゴン曲線らしいです
ドラゴンなのか・・・・?w

ドラゴン曲線を見てもらう前にちょっと説明

コッホ曲線もC曲線も線分を三角形にどんどん置き換えていくことでできあがるものでした
でも、線分の上側に三角形ができるのか下側にできるのかわからないんじゃ・・・?って思った人もいるはずです
そう、実はちゃんと向きがあるのです

こんな感じ
Koch&C Arrow

この規則にしたがって書いていくとコッホ曲線とC曲線ができあがります

さて、本題のドラゴン曲線ですが、実はC曲線とほぼ一緒です
ただ一箇所矢印の向きが違うだけなのです
doragon

たったこれだけで全く違うものになります
なので当然フラクタルも無限にあります
名前の付いているフラクタルは無限にあるフラクタルの内の数個でしかないのです
暇があれば自分でおもしろい形のフラクタルを探してみるのもいいかも・・・?w

繰り返しは10回
※クリックでstart

Flash Player 10 にしてください

ソースはほぼC曲線と同じです
どこが違うか探してみてくださいw

Line.as


package {
	import flash.display.Sprite;
	import flash.geom.Point;
	public class Line extends Sprite{
		public var startP:Point;
		public var endP:Point;
		public var distance:Number;
		public var angle:Number;
		function Line(startP:Point, endP:Point) {
			this.startP = startP;
			this.endP = endP;
			distance = Point.distance(startP, endP);
			angle = Math.atan2(endP.y-startP.y, endP.x-startP.x);

			graphics.lineStyle(0,0x000000);
			graphics.moveTo(startP.x, startP.y);
			graphics.lineTo(endP.x, endP.y);
			graphics.endFill();
		}
	}
}

DoragonCurve.as


package {
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.events.Event;
	import flash.geom.Point;
	public class DoragonCurve extends Sprite {
		private var list:Array = [];
		private var endPoint:Point;
		private var count:int=0;
		private const N:int=10;
		private const W:int = 300;
		private const H:int = 300;
		function DoragonCurve() {
			var line:Line=new Line(new Point(W/4,H*2/3),new Point(W-W/4, H*2/3));
			endPoint=line.startP;
			list.push(line);
			stage.addChild(line);

			stage.addEventListener(MouseEvent.CLICK,onClick);
			function onClick(event:MouseEvent):void {
				stage.addEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
				stage.removeEventListener(MouseEvent.CLICK,onClick);
			}

		}
		private function onEnterFrameHandler(event:Event):void {
			var line:Line=list[0];
			stage.removeChild(line);
			list.splice(0, 1);

			var p1:Point=new Point();
			p1.x= line.distance/2 * Math.SQRT2 * Math.cos(line.angle-Math.PI/4) + line.startP.x;
			p1.y= line.distance/2 * Math.SQRT2 * Math.sin(line.angle-Math.PI/4) + line.startP.y;

			newLine=new Line(line.endP,p1);
			stage.addChild(newLine);
			list.push(newLine);
			var newLine:Line=new Line(line.startP,p1);
			stage.addChild(newLine);
			list.push(newLine);

			if (line.startP == endPoint) {
				count++;
				trace(count);
				if (count == N) {
					stage.removeEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
				}
			}

		}
	}
}

おまけ

ドラゴン曲線は実際に作ることができます
作り方は細長い紙を同じ方向に半分に折り続けていき、それを開いたあと折り目が90度になるように整えるだけです
実際に作ってみました
写真は5回折ったものです
手作りDoragonCurve

繰り返しを5回にしたflashと比べてみてください

※クリックでstart

Flash Player 10 にしてください

多少雑ですが同じ形になりました(よかったw)
実際に折ってみるとわかりますが、ドラゴン曲線はお互いの線が一回も交わりません
なんでだろー?w
暇つぶしに作ってみるのもおもしろいかもw
10回折りの手作りドラゴン曲線を作れば英雄に?!w

このエントリーを含むはてなブックマークはてなブックマーク - フラクタル~ドラゴン曲線~ この記事をクリップ!Livedoorクリップ - フラクタル~ドラゴン曲線~ BuzzurlにブックマークBuzzurlにブックマーク FC2ブックマークへ追加 Bookmark this on Delicious Digg This