Flash 与数学:星形线

 

 

  

 

  今晚我们来玩玩这种线绘制,星形线。 在大学的里面解析几何当中,把这种曲线叫做四尖点星形线。由于它的形状如星星 称上这个名称也不无道理,看到这种线的时候,你是否会许个愿望呢?一起来吧

 

星形线公式:

   x=a*cos3A

   y=a*sin3A   

 

公式很简单,A的角度可以是正无穷 和负无穷之间,(a可以理解为半径) 但是我的做法,理解他为0-360已经足够了。也就是说他旋转一圈。通过绘制这条线,同样我们加入一些线的动画,这样做的好处是增加一些动感性。

 

程序的思路很简单,我们就按他的提供的公式设计一个绘图程序,它会按顺时针来进行绘制,这是因为flash 的坐标系和我们传统的数学坐标系有区别,顺时针所转换的角度是正的,而传统的则是负的。可以去了解一些这两种坐标系区别。

 

我们使用描点的方式来进行绘制线,是在flash 里面一个很常用的手法。而你看到的图像,我们可以假设认为是360度描点所得的结果,有兴趣可以继续深入。

 

下面是代码:

 

package { //星形线动画 // x=a*cos3A // y=a*sin3A // 写于2010年4月11日 import flash.display.Sprite; import flash.events.*; public class Main extends Sprite { private var pen:Sprite=new Sprite(); private var lineMc:Sprite=new Sprite(); private var angle:int=-1;//角度 private var centerX:Number=stage.stageWidth/2;//中心点x位置 private var centerY:Number=stage.stageHeight/2;//中心点y位置 public function Main() { init(); } private function init():void { addChild(pen); addChild(lineMc); //描绘十字坐标 pen.graphics.lineStyle(1); pen.graphics.moveTo(centerX,centerY); pen.graphics.lineTo(centerX,0); pen.graphics.moveTo(centerX,centerY); pen.graphics.lineTo(centerX*2,centerY); pen.graphics.moveTo(centerX,centerY); pen.graphics.lineTo(centerX,centerY*2); pen.graphics.moveTo(centerX,centerY); pen.graphics.lineTo(0,centerY); addEventListener(Event.ENTER_FRAME,Run); } private function Run(event:Event):void { lineMc.graphics.clear(); if (angle==-1) { var px:Number=centerX+200*Math.pow(Math.cos(angle*Math.PI/180),3); var py:Number=centerY+200*Math.pow(Math.sin(angle*Math.PI/180),3); lineMc.graphics.lineStyle(1,0x0033FF); lineMc.graphics.moveTo(centerX,centerY); lineMc.graphics.lineTo(px,py); lineMc.graphics.drawCircle(px,py,5); pen.graphics.moveTo(px,py); drawLine(px,py); } else if(angle<=360 && angle>=0) { px=centerX+200*Math.pow(Math.cos(angle*Math.PI/180),3); py=centerY+200*Math.pow(Math.sin(angle*Math.PI/180),3); lineMc.graphics.lineStyle(1,0x0033FF); lineMc.graphics.moveTo(centerX,centerY); lineMc.graphics.lineTo(px,py); lineMc.graphics.drawCircle(px,py,5); drawLine(px,py); } else { removeEventListener(Event.ENTER_FRAME,Run); trace("over"); } angle++; } //绘制线程序 private function drawLine(x2,y2:Number):void { pen.graphics.lineStyle(1,0xff0000); pen.graphics.lineTo(x2,y2); } } }

 

 

 

 扩展:除了星形线,还有之前介绍的螺旋线等等,还有很多关于线的图像和面,例如玫瑰线等等这些线会在日后写作当中介绍一下。

我们有意识将他认为是0-360旋转一周的图像,其程序只是通过我们常用”描点法" 描写这些图像。有兴趣可以尝试一下玫瑰线的绘制

下面就留一个问题,下面的是怎样绘制?或者复制? 好,准备睡觉去,累

 

 

 

 

你可能感兴趣的:(flash,与数学)