转 第三章 三角学应用(1)(as3.0)

从这一章开始,我们将学习三角学,并在第五章开始应用到动画技术中,其实在下一章的绘
图技术中就会接触到。如果你已经对三角学有所了解或渴望学习动画方面的知识, 那么可以
跳过开始这部分,待日后遇到不懂的问题时,再回来学习。我们用到的 90%的三角学都需
要 Math.sin 和 Math.cos 这两个函数。在我写本书的第一版时,曾说过,除了在中学学习
过的那些代数和几何外(而且由于时间久远大多都记不清了),我没有接受过正规的数学培
训,最初在本章中的内容都是来自于各种书籍,网站或是其它网络资源,这是因为这部分知
识并不难,既然我能够学会,那么你也一定可以的。而现在我已经完成了大学代数和微积分
课程,对于三角学也有了更为全面和系统的了解。我可以很荣幸地说, 这一章的内容非常好,
因为对于这个学科有了更为深入的了解,所以很多地方可以解释得更为清楚。
什么是三角学(Trigonometry)
    三角学是一门研究三角形与其边和角关系的学科。 当我们观察一个三角形时,发现它有
三条边和三个角(因此称为三角),而且在这些边和角之间存在着一些特殊的关系。例如,
增大其中的任何一个角,那么该角所对应的边就会增长(假设其它两条边长度不变) 同时,
                                                                          
其它两个角会变小,实际上,究竟它们变化了多少,加以计算后就可以得出一个比例。在一
个三角形中,如果其中有一个角为 90 度,那么就称为直角三角形,并在该角的夹角处标出
一个正方形(垂足),只有在直角三角形才会这样。学习直角三角形中存在的关系要比推导
基本公式简单得多,这使得直角三角形成为一种非常有用的结构, 本章及该书后面的内容大
多都是直角三角形。
角(Angle)
    角是三角学最主要的研究对象,  让我们先来解决这个问题。 角是由两条相交线构成的图
形,或是两条相交线之间的那部分空间,空间远大,夹角越大。事实上,两条相交的线会形
成四个角,见图 3-1:

转 <wbr>第三章 <wbr>三角学应用(1)(as3.0)


图 3-1 两条线形成四个角
弧度制(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 给出一些常用的弧度制。
转 <wbr>第三章 <wbr>三角学应用(1)(as3.0)

图 3-2 弧度与角度
     从现在起我们就要开始使用弧度制了,而且今后会遇到很多用弧度表示度的情况。
     影片剪辑和 Sprite 影片的 rotation 属性都要使用角度制,而且属性非常会经常使
用。例如,一辆汽车需要旋转到运动的方向,如果使用三角学计算运动方向,那么所得到的
角度是以弧度制表示的,而汽车的旋转则需要使用角度制。相反,如果要指定某个对象向某
个方向前进,就要获得它的旋转(rotation)角度,而这是用角度制表示的,如果要在三角函
数中使用它就一定要转换为弧度制。
角度制,还应用在滤镜上,如果使用投影滤镜(drop shadow filter),来为物体投射 45 度
的阴影,就需要指定其角度而非弧度,不论是在 Flash IED 中还是使用 ActionScript 代
码都一样。
     为什么在一个编程体系里有两种截然不同的制度呢?也许这就是 Flash 双重性。一方
面,这是设计人员的工具,在 Flash IDE 中拥有所有的绘图和变形工具,可以绘制出漂亮
的图形。如果你对一名设计员说把你制作的 logo 文字旋转一个弧度,你肯定会遭白眼。另
一方面,Flash 也是一个开发工具,更像一种编程语言,ActionScript 用户使用弧度制。
总之,不论你是否喜欢都要使用到它们,而且还需要掌握角度制与弧度制间的相互转换。以
下是公式:
弧度(radians) = 角度(degrees) * Math.PI /180
角度(degrees) = 弧度(radians) * 180 / Math.PI
     在学习本书的过程中,会遇到很多公式。无论哪里,遇到需要记忆的公式时,我都会指
出来,希望大家能够识记,这里是第一个公式。每次需要用到这些公式时,可以查找一下,
但不会得到现成的代码,  因为这些代码都需要用手敲进去。我使用 ActionScript 写这些公
式,比如使用 Math.PI 要比使用 pi 或其它字符要好, 因为这和我们输入的代码是一致的。
     180 度大约等于 3.14…弧度。换句话讲,半圆为 pi 个弧度,整圆为 2 pi 个弧度,一
个弧度大概为 57.29…度。


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

转 <wbr>第三章 <wbr>三角学应用(1)(as3.0)
图 3-3 标准坐标系
    然而 Flash 是基于视频屏幕的坐标系,0,0 点为左上角,如图 3-4。X 值从左向右不断
增大,但 Y 轴是相反的,正值向下,负值向上。这个系统有其历史根源,与屏幕扫描建立图
像的原理一样,从左到右,从上到下。
转 <wbr>第三章 <wbr>三角学应用(1)(as3.0)
图 3-4 Flash 坐标系
    我们可以想像成一个普通的坐标系,只是要把 Y 轴颠倒过来,并把屏幕中心迁移到屏幕
的左上角。下面就来说说角。在一般的坐标系中,角度是以逆时针计算的,并以 0 度为起点
向正 X 轴引一条线,如图 3-5 所示。
转 <wbr>第三章 <wbr>三角学应用(1)(as3.0)

图 3-5 普通的角度
在 Flash 中是颠倒的,如图 3-6 所示。顺时针旋转角度为正角。逆时针就意味着为负角。
转 <wbr>第三章 <wbr>三角学应用(1)(as3.0)

图 3-6 Flash 的角度
三角形的边
    对于三角形的边,没有太多可说的,但它们都有各自的术语。以直角三角形为例,如图
3-7 所示,每条边都有各自的名称,与 90 度角相接的两条边称为直角边(legs),相对的边
称为斜边,它总是那个最长的边。
转 <wbr>第三章 <wbr>三角学应用(1)(as3.0)

图 3-7 直角三角形各部分
     刚才说到对边时,说它是与该角不相接的边。说到邻边时,说它是与角相接的边。在很
多例子中, 都是与其余两个不是 90 度的角打交道。在三角形中最有趣的就是角与边的关系,
这些关系对于动画制作非常有用,下面就让我们来看看。
三角函数
     ActionScript 拥有一套用于计算不同三角关系的三角函数:正弦,余弦,正切,反正
弦,反余弦和反正切。 下面我们就开始定义和使用这些函数,而后还会介绍它们的实际应用。
正弦(Sine)
     下面是三角学的第一个部分。一个角的正弦值等于该角的对边与斜边的比,在
ActionScript 中,使用 Math.sin(angle) 函数来表示。 3-8 所示为一个 30 度角的正弦。
                                                  
对边长为 1,斜边长为 2,两条边的比为 1 比 2,或记作 1/2 或 0.5,因此,我们可以说 30
度角的正弦值为 0.5,下面在 Flash 中测试一下:
trace(Math.sin(30));
转 <wbr>第三章 <wbr>三角学应用(1)(as3.0)

图 3-8 角的正弦值为对边/斜边
    输出结果为 –0.988031624092862, 为什么会这样,能够找出原因吗?这是因为我们忘
记了将结果转换为弧度制。我敢说你以后会常犯这种错误(我也一样),所以一定要小心。
以下是正确的写法:
trace(Math.sin(30 * Math.PI / 180));
成功!输出 0.5
    还可能得到 0.4999… 这样的值, 这并不是程序的错误, 而是由于二进制计算机常以浮
点形式表示数值。但这个值已经非常接近了,所以就认为它等于 0.5。
可以把一个三角形想象为角度为 30,两条边长分别为 1 和 2,然后把它移到普通坐标系中,
不要忘了, Flash 坐标系的 Y 轴向下,角度是顺时针的。所以,对边和角度都是相反的.

因此,比例也变成了-1/2,我们就称它为-30 度角的正弦值。同时,把表达式改为:
trace(Math.sin(-30 * Math.PI / 180));
    好的,不会很痛苦吧?下面再来看一个三角函数:余弦。
余弦(Cosine)
    在 Flash 中,使用 Math.cos(angle) 就可以计算余弦值,余弦的定义为角的邻边与斜
边之比。

反正弦(Arcsine)和反余弦(Arccosine)
    与正切相似,反正弦和反余弦在一般的 Flash 动画中很少使用。然而,我们还是要学
习一下它们的用法,实际上就是正弦和余弦函数的反函数。   换句话讲,就是输入一个比例值,
返回一个角度值(以弧度表示)。
    在 ActionScript 函数中记作 Math.asin(ratio) 和 Math.acos(ratio)。下面让来测
试一下,我们已经知道 30 度角的正弦值为 0.5,所以 0.5 的反正弦值应为 30 度,检验一下:
trace(Math.asin(0.5) * 180 / Math.PI);
别忘记将结果转换为角度制,才能得到角度制 30 度,而不是弧度制 0.523。
我们知道,30 度角的余弦值大约为 0.865,下面以同样的方法来测试一下:
trace(Math.acos(0.865) * 180 / Math.PI);
    得到结果为 30.1172947473221。 如果把 30 度的余弦值输入得更准确, 那么所得的结果
也会更为精确。怎么样,不难吧?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android OpenGL ES 3.0是一个强大的图形渲染API,用于开发Android平台上的高性能3D应用程序和游戏。从入门到精通OpenGL ES 3.0需要系统性的学习教程,以下是一个简要的学习路径: 1. 基础知识:首先需要了解OpenGL ES 3.0的基础知识,包括图形渲染管线、坐标系、顶点和片元着色器等。可以通过阅读相关的教程、书籍或者在线资源来获得这方面的知识。 2. 环境搭建:学习OpenGL ES 3.0之前,需要先搭建好学习环境。可以下载安装Android Studio和相关的开发工具,以及配置好OpenGL ES 3.0的开发环境。 3. 学习资源:寻找一些高质量的学习资源,如教程、书籍或者在线课程。可以选择一些经典的OpenGL ES 3.0教程,其中包括基础知识、实例代码和案例分析等。 4. 实践练习:学习OpenGL ES 3.0最重要的一点就是不断地进行实践练习。可以按照教程中的示例代码,逐步实现一些简单的图形渲染效果。通过实践来加深对OpenGL ES 3.0的理解,掌握各种绘制技术和渲染效果。 5. 深入研究:在掌握了基础知识和实践经验之后,可以进一步深入研究OpenGL ES 3.0的高级特性和扩展功能。包括纹理映射、着色器编程、光照和阴影效果等。可以参考一些专业书籍和高级教程来进一步提升自己的技术水平。 6. 项目实践:最后一步是通过实际项目的实践来巩固所学的知识。可以尝试开发一些简单的游戏或者应用程序,利用OpenGL ES 3.0来实现复杂的图形渲染效果。通过实际项目的经验,可以进一步提升自己的技术能力和解决问题的能力。 总之,学习Android OpenGL ES 3.0需要系统性的学习教程,并通过不断实践和项目实践来提升自己的技术水平。只有在不断学习和实践中,才能逐步精通OpenGL ES 3.0并运用到实际开发中。 ### 回答2: Android OpenGL ES 3.0 是一种强大的图形渲染技术,用于在Android设备上创建高性能的3D图形和特效。要系统地学习和掌握Android OpenGL ES 3.0,您可以按照以下步骤: 1. 学习基础知识:首先,您需要了解计算机图形学和OpenGL ES的基本概念。这包括了解3D图形渲染的原则、OpenGL ES的架构、状态机模型等。可以通过阅读相关的教材或者参考互联网上的优质教程来学习这些内容。 2. 编程环境设置:为了开始使用Android OpenGL ES 3.0,您需要配置开发环境。这包括安装和配置Android开发工具包(Android SDK)以及适当的集成开发环境(如Android Studio)。确保您的开发环境正确设置,并具备OpenGL ES 3.0的支持。 3. 学习OpenGL ES API:学习OpenGL ES 3.0的API是掌握该技术的关键。您需要理解OpenGL ES的基本绘图函数、顶点和片段着色器编程、纹理映射等概念。可以通过查阅OpenGL ES 3.0的官方文档或参考书籍来学习这些API。 4. 实践项目:通过实践项目来巩固所学的知识。您可以从最简单的项目开始,如画一个三角形,然后逐步扩展,添加更多的图形对象和特效。这样您可以深入了解OpenGL ES 3.0的使用和性能优化。 5. 学习高级主题:一旦掌握了基础知识,您可以进一步学习OpenGL ES 3.0的高级主题。这可能包括光照、阴影、投影、深度测试和其他高级特性。这些主题的学习可以通过参考更高级的教程、专业书籍或者参与相关论坛和社区来深入研究。 6. 性能优化:了解如何优化OpenGL ES 3.0的性能也是非常重要的。您可以学习如何使用缓冲区对象、顶点缓冲区对象(VBO)、纹理压缩和其他优化技术来提高应用程序的帧率和响应速度。 总而言之,要系统学习和掌握Android OpenGL ES 3.0,您需要深入理解计算机图形学和OpenGL ES的原理,学习API的使用和性能优化技术,并通过实践项目来强化您的理解和应用能力。这需要坚持不懈的学习和实践,但通过这样的系统学习,您将能够成为一名Android OpenGL ES 3.0的专家。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值