zoukankan      html  css  js  c++  java
  • AS3三角学应用

     

    什么是三角学(Trigonometry)

     

        三角学是一门研究三角形与其边和角关系的学科。当我们观察一个三角形时,发现它有三条边和三个角(因此称为三角),而且在这些边和角之间存在着一些特殊的关系。例如,增大其中的任何一个角,那么该角所对应的边就会增长(假设其它两条边长度不变),同时,其它两个角会变小,实际上,究竟它们变化了多少,加以计算后就可以得出一个比例。在一个三角形中,如果其中有一个角为 90 度,那么就称为直角三角形,并在该角的夹角处标出一个正方形(垂足),只有在直角三角形才会这样。学习直角三角形中存在的关系要比推导基本公式简单得多,这使得直角三角形成为一种非常有用的结构。

    角(Angle)

        角是三角学最主要的研究对象,让我们先来解决这个问题。角是由两条相交线构成的图形,或是两条相交线之间的那部分空间,空间越大,夹角越大。事实上,两条相交的线会形成四个角。

    弧度制(radian)与角度制(degress)

        弧度制与角度制是角度测量中的两种特殊制度。我们大概对于角度制最为熟悉,甚至闭着眼都能画出 45 度或 90 度的角。圆的 360 度体系已经成为了一种文化,人们常说“180 度转弯”就是指“转到相反的方向”,这里并不是指转弯的方向,而是指一种相反的观点。我们所讨论的角度,对于计算机来说,就是弧度。所以,不管你是否喜欢,都要对弧度制有所了解。

        1 弧度约等于 57.2958 度。你也许会问“这符合逻辑吗?”确实有其逻辑所在。一个圆,360 度,计算出的弧度为 6.2832。仍然没有任何意义?好,想一下圆周率派 Pi(π) 约等于 3.1416,而一个圆(6.2832 弧度)就等于 2 pi。我们知道 360 度相当于 2 pi,180 度相当于 pi,90 度相当于 pi/2,等等。图 3-2 给出一些常用的弧度制。

     

    度制与弧度制间的相互转换公式:

        弧度(radians) = 角度(degrees) * Math.PI /180

        角度(degrees) = 弧度(radians) * 180 / Math.PI

    Flash 坐标系

        如果我们习惯于数学坐标系,那么对于 Flash坐标系可能会有些不习惯,因为在这里一切是颠倒(upside down)的。在标准坐标系中,用X 表示水平轴,用 Y 表示垂直轴,Flash 也是一样 。当 x=0,y=0 时,坐标(0,0)通常显示在中心位置,X 为正数时在右边,X 为负数时在左边,Y 为正数时在上边,Y 为负数时在下边。

        然而 Flash 是基于视频屏幕的坐标系,0,0 点为左上角。X 值从左向右不断增大,但 Y 轴是相反的,正值向下,负值向上。这个系统有其历史根源,与屏幕扫描建立图像的原理一样,从左到右,从上到下。我们可以想像成一个普通的坐标系,只是要把 Y 轴颠倒过来,并把屏幕中心迁移到屏的左上角。

        下面就来说说角。在一般的坐标系中,角度是以逆时针计算的,并以 0 度为起点向正 X 轴引一条线。

        在 Flash 中是颠倒的,顺时针旋转角度为正角。逆时针就意味着为负角。

    三角函数

         ActionScript 拥有一套用于计算不同三角关系的三角函数:正弦(sin),余弦(cos),正切(tan),反正弦(asin),反余弦(acos)和反正切(atan or atan2)。这里不重复介绍它们的定义,要注意的是使用三角函数时,传入的参数是弧度制,非角度。

        反正弦和反余弦在一般的 Flash 动画中很少使用。实际上就是正弦和余弦函数的反函数。换句话讲,就是输入一个比例值,返回一个角度值(以弧度表示)。

        Math.atan2(y,x) 是Flash 的另一个反正切函数,它比 Math.atan(ratio)要有用得多。实事上,只需要学会这个函数的用法就可以了,函数中包括两个参数:对边长度与邻边长度。注意应该是 y,x。atan2在需要区分四个角的时候非常实用。 

    在实际中的应用

    1.旋转(Rotation)--RotateToMouse.as

    2.波形

    3.平滑的上下运动--Bobbing.as

    4.线性垂直运动--Wave1.as

    5.心跳运动—Pulse.as

    6.双角波形—Random.as

    7.绘制波形--Wave2.as

    8.圆和椭圆

    9.圆形运动—Circle.as

    10.椭圆运动—Oval.as

    11.勾股定理

    12.两点间距离—Distance.as

    一些重要的公式

    角的正弦值 = 对边 / 斜边

    角的余弦值 = 邻边 / 斜边

    角的正切值 = 对边 / 邻边 

     

    角度制与弧度制的相互转换:

    弧度 = 角度 * Math.PI / 180

    角度 = 弧度 * 180 / Math.PI 

     

    向鼠标旋转(或向某点旋转):

    dx = mouseX - sprite.x;

    dy = mouseY - sprite.y;

    sprite.rotation = Math.atan2(dy, dx) * 180 / Math.PI;

     

    创建波形:

    public function onEnterFrame(event:Event){

    value = center + Math.sin(angle) * range;

    angle += speed;

    }  

     

    创建圆形:

    public function onEnterFrame(event:Event){

    xposition = centerX + Math.cos(angle) * radius;

    yposition = centerY + Math.sin(angle) * radius;

    angle += speed;

    }  

     

    创建椭圆:  

    public function onEnterFrame(event:Event){

    xposition = centerX + Math.cos(angle) * radiusX;

    yposition = centerY + Math.sin(angle) * radiusY;

    angle += speed;

     

    计算两点间距离:

    dx = x2 – x1;

    dy = y2 – y1;

    dist = Math.sqrt(dx*dx + dy*dy);

    文章内容来源:《Foundation Ationsript 3.0 Animation》

    示例代码:AS3三角学应用Demo

  • 相关阅读:
    git 专题
    Android yyyymmdd转成yyyy-MM-dd格式
    Android LayoutInflater.from(context).inflate
    Android TextView内容过长加省略号,点击显示全部内容
    Android 标题栏封装
    Android 自定义Android带图片和文字的ImageButton
    Android 防止按钮连续点击的方法(Button,ImageButton等)
    Android 动态改变布局属性RelativeLayout.LayoutParams.addRule()
    Android ActionBar的Overlay模式如何不遮盖顶部内容的问题
    Android 时间轴TimeLine
  • 原文地址:https://www.cnblogs.com/tqlin/p/2759081.html
Copyright © 2011-2022 走看看