Koch曲线(FLASH)

标签:
koch库赫曲线flashas3 |
分类: 学习笔记 |
Koch曲线是1904年瑞典数学家H.von
Koch(科赫)构造的,其构造过程是取一条长度为L0的直线段,将其三等分,保留两端的线段,将中间的一段改换成夹角为60度的两个等长直线。再将长度为L0/3的4个直线段分别进行三等分,并将它们中间的一段均改换成夹角为60度的两段长为L0/9的直线段。重复以上操作直至无穷,可得以一条具有自相似结构的折线,即Koch典线。如图:
http://s10/middle/67532f7cgc0fb4da04f49&690
算法描述:
1、对于给定的初始直线AB,按Koch曲线的构成原理,相关坐标点计算方法如下:
xc=xa+(xb-xa)/3
yc=ya+(yb-ya)/3
xe=xb-(xb-xa)/3
ye=yb-(yb-ya)/3
L=sqrt((xe-xc)*(xe-xc)+(ye-yc)*(ye-yc))
alpha=atan((ye-yc)/xe-xc))
xd=xc+cos(alpha+PI/3)*L
yd=yc+sin(alpha+PI/3)*L
2、分别对AC,CD,DE,EB线段调用koch函数,通过递归来实现“无穷”。计算机不能像数学家的设想那样运算至无穷,所以要根据要显示的最小长度来做为递归的终止条件。
http://s7/bmiddle/67532f7cgc1052983ca26&690
算法实现:
package
{
import
flash.display.MovieClip;
import
flash.display.Shape;
import
flash.display.Graphics;
import
flash.geom.Matrix;
public class
Koch extends MovieClip {
private var
shape:Shape;
private var
minL:int=200;
public
function Koch() {
//
constructor code
shape=new
Shape();
shape.x=50;
shape.y=200;
var
matrix:Matrix = shape.transform.matrix;
matrix.d=-1;
shape.transform.matrix=matrix;
shape.graphics.lineStyle(.1,0xFF0000,1);
this.addChild(shape);
koch(0,0,400,0);
}
private
function koch(xa:Number,ya:Number,xb:Number,yb:Number):void
{
if(((xb-xa)*(xb-xa)+(yb-ya)*(yb-ya))<minL)
{
shape.graphics.moveTo(xa,ya);
shape.graphics.lineTo(xb,yb);
}else
{
var
xc,yc,xd,yd,xe,ye:Number;
var
L:Number;
http://s10/middle/67532f7cgc0fb4da04f49&690
算法描述:
1、对于给定的初始直线AB,按Koch曲线的构成原理,相关坐标点计算方法如下:
xc=xa+(xb-xa)/3
yc=ya+(yb-ya)/3
xe=xb-(xb-xa)/3
ye=yb-(yb-ya)/3
L=sqrt((xe-xc)*(xe-xc)+(ye-yc)*(ye-yc))
alpha=atan((ye-yc)/xe-xc))
xd=xc+cos(alpha+PI/3)*L
yd=yc+sin(alpha+PI/3)*L
2、分别对AC,CD,DE,EB线段调用koch函数,通过递归来实现“无穷”。计算机不能像数学家的设想那样运算至无穷,所以要根据要显示的最小长度来做为递归的终止条件。
http://s7/bmiddle/67532f7cgc1052983ca26&690
算法实现:
package