等速螺线又称阿基米德螺线。它的应用很广泛,在工业设计领域当中有着很重大的贡献。翻开高中课本,这种概念解析就可以看到他的概念定义。这里就不想抛书包了。
今天,我们来创建一条简单的等速螺线。它的公式很简单: ρ=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
这样就可以变化出很多不错的图形。
按时间间隔来进行转换一些图像。
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow