首页 > 编程知识 正文

数学螺线,数学三考对数螺线吗

时间:2023-05-03 11:59:59 阅读:212727 作者:2216

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

 

  今天,我们来创建一条简单的等速螺线。它的公式很简单: ρ=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

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