首页 > 编程知识 正文

Flash 与数学等速螺线,数学螺线

时间:2023-05-05 14:05:47 阅读:212702 作者:1223

  等速螺线又称阿基米德螺线。它的应用很广泛,在工业设计领域当中有着很重大的贡献。翻开高中课本,这种概念解析就可以看到他的概念定义。这里就不想抛书包了。

 

  今天,我们来创建一条简单的等速螺线。它的公式很简单: ρ=at+P0 ,在特殊的情况下,可以变成 ρ=at。(a>0,t为角度)

有了这个公式,我们可以利用as 绘制函数来描绘一条等速螺线,可以采用两种的方式来制作,一种是三角函数,第二种是极坐标。

我们采用第二种方式来制作。

 

创建一个螺线类

package {//等速螺旋线import flash.display.Sprite;import flash.geom.Point;public class Luoxuan extends Sprite{public function Luoxuan(){this.graphics.moveTo(0,0);}//创建2D的螺旋线public function creatLuoxuan(r:Number,n:int):void{ var rad:Number=2*Math.PI/n;for (var j:Number=0; j<=360; j++){var len:Number=r*j*rad;var point:Point=Point.polar(len,j*rad);drawPoint(point);}//drawPoint(new Point(0,0));}//描点private function drawPoint(point:Point):void{this.graphics.lineStyle(1);this.graphics.lineTo(point.x,point.y);}}}

 

 

我们主要涉及到一个坐标转换的问题,极坐标当中采用的转换公式,在Point里面可以找到相关的转换方法,或者我们可以自己写一个也可以

var point:Point=Point.polar(len,j*rad);

一个长度,一个是角度,两者进行转换。

 

 

主程序运行:

package {import flash.display.Sprite;import flash.events.*;public class Main extends Sprite{private var obj:Luoxuan;public function Main(){init();}private function init():void{obj=new Luoxuan();//创建螺线对象obj.creatLuoxuan(8,100);obj.x=stage.stageWidth/2;obj.y=stage.stageHeight/2;addChild(obj);}}}

 

运行之后,螺线就出来了。

 

为了加强一个动画感,我们可以借助旋转Y轴来观看这个螺线。

package {import flash.display.Sprite;import flash.events.*;public class Main extends Sprite{private var obj:Luoxuan;public function Main(){init();}private function init():void{obj=new Luoxuan();//创建螺线对象obj.creatLuoxuan(8,100);obj.x=stage.stageWidth/2;obj.y=stage.stageHeight/2;addChild(obj);addEventListener(Event.ENTER_FRAME,Run);}private function Run(event:Event):void{obj.rotationY+=1;//以y轴旋转}}}

 

 

 

 

 

 

事后,我修改了一些参数,发现了另外一些有趣的图像.通过螺旋线特征,发现图像很有趣

 

for (var j:Number=0; j<=360; j++) { var len:Number=r*j*rad; var point:Point=Point.polar(len,j*rad); drawPoint(point); }

 

事后之中,我将porlar 第二个参数进行尝试改造,随便输入去,发现一些特征,产生一些意想不到图形效果。

  var rad:Number=2*Math.PI/n;

 

当n值一定的时候,则我们将360度平均分成了2*Math.PI/n; 等分,也就是说,我描点的时候,假设输入了正常的情况,他会出现等速的螺线

var point:Point=Point.polar(len,j*rad); 出现了等速螺线,呈现出一种圆的感觉。

当我改成了这个角度值的时候,发生了变化

var point:Point=Point.polar(len,j*10);

 

我按 11,12,13,14--n值一直这样填充入去这些数当中,

var point:Point=Point.polar(len,j*11);

var point:Point=Point.polar(len,j*12);

var point:Point=Point.polar(len,j*13);

 

这样一直实验

 

结果让我感觉到兴奋,这种螺线会变化出意外的图像,看看下面的情况

这些可能是一种图形美,你会慢慢发现到,变化的情况很多,令人意想不到。可以进行尝试一下。

 

 

 

修改了另外一个参数。变化出来的图像

 

 

 

 

 对程序进行改造:

package {import flash.display.Sprite;import flash.events.*;import flash.utils.Timer;public class Main extends Sprite{private var obj:Luoxuan;private var n:int=0;public function Main(){init();}private function init():void{obj=new Luoxuan();//创建螺线对象addChild(obj);var timer:Timer=new Timer(2000);//计算两秒转换一个图形timer.addEventListener(TimerEvent.TIMER,onTimer);timer.start();addEventListener(Event.ENTER_FRAME,Run);}private function Run(event:Event):void{ obj.x=stage.stageWidth/2;obj.y=stage.stageHeight/2;obj.rotationY+=1;//以y轴旋转}private function onTimer(event:TimerEvent):void{ obj.clear();n++; obj.creatLuoxuan(8,100,n);}}}

 

 

package {//等速螺旋线import flash.display.Sprite;import flash.geom.Point;public class Luoxuan extends Sprite{public function Luoxuan(){this.graphics.moveTo(0,0);}//创建2D的螺旋线public function creatLuoxuan(r:Number,n:int,angle:Number):void{ var rad:Number=2*Math.PI/n;for (var j:Number=0; j<=360; j++){var len:Number=r*j*rad;var point:Point=Point.polar(len,j*angle);drawPoint(point);}//drawPoint(new Point(0,0));}//描点private function drawPoint(point:Point):void{this.graphics.lineStyle(1);this.graphics.lineTo(point.x,point.y);}public function clear():void{this.graphics.clear();}}}

 

增加一个可以变化的参数:

 public function creatLuoxuan(r:Number,n:int,angle:Number):void

这样就可以变化出很多不错的图形。

按时间间隔来进行转换一些图像。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。