第12章Point类与向量

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第12章Point类与向量Point在英文中的意思是空间的一点,表示地方和位置。在ActionScript3.0中,Point指显示屏幕上的点,用坐标来表示。坐标用来表示某个点的绝对位置,在游戏中通常用来表示游戏事物的平面位置。在Flash的坐标系统中,Point类用于定义显示屏幕上的位置,也就是坐标。在现实世界中,有很多量是既有大小,又有方向的。物理学中位移、力、速度、加速度等常见的量都是这样。通常把这种既有大小,又有方向的量叫做向量,也叫矢量。向量有多种,常用的主要是用于二维空间的平面向量和用于空间的三位向量。本节将结合坐标介绍点坐标与平面向量的关系,以及利用点坐标来进行向量的相关计算。1.点坐标与向量在Flash的坐标系统中,利用点来控制显示对象的位置,这些点都是有水平的横坐标和竖直的纵坐标来组成。该坐标系统中,一个点对应屏幕上一个确定的位置。如图中坐标(x,y)表示的就是P点的位置:Flash坐标系中的点向量a2.Point类Point类定义一对Flash坐标。它表示二维坐标系中的某个位置。其中x表示水平轴,y表示垂直轴。在ActionScript3.0中,该类有3个属性,10个方法。1)Point对象的创建和获取使用Point类定义坐标,通常使用其构造函数来定义。其用法代码如下所示。//法一varpoint:Point=newPoint(x,y)//法二varpoint:Point=newPoint()point.x=x坐标值point.y=y坐标值用法格式说明:法一:使用Point类的构造函数中的两个参数,对横坐标和纵坐标直接赋值。法二:使用Point类的构造函数创建一个空对象,然后利用Point对象的两个属性x,y对对象赋值。如果不赋值,则为原点坐标。2)点对象的长度使用Point对象的属性length,可以直接获取对象点到坐标原点之间线段的长度。其用法格式如下所示。varlen:Number=p.length说明:p是一个点对象。示例代码如下://使用构造函数直接定义点pt1varpt1:Point=newPoint(10,20);//获取点pt1的长度varlen:Number=pt1.lengthtrace(len)//输出:22.360679774997898拖不出区域的小球效果图3)两点之间的距离使用Point对象的ditance()方法,可以计算两个点之间的距离。其用法格式如下所示。distance(pt1:Point,pt2:Point)说明:该方法接受两个参数pt1和pt2,为两个点。下面的使用distance方法,计算鼠标在舞台上移动的速度。其实现原理为:通过帧循环事件,获取连续两帧之间鼠标位置之间距离,然后使用此距离处于两帧所间隔的时间,获取鼠标移动的速度。4)坐标加减运算使用Point对象的add()方法可以实现将一个点的坐标与另一点的坐标相加,并返回一个新的坐标点。使用Point对象的subtract()方法可以实现一个点的坐标减去另一点的坐标,并返回一个新的坐标点。这两种方法的用法格式如下所示。pt1.add(pt2:Point):Pointpt1.subtract(pt2:Point):Point参数说明:pt1:原始点的坐标。pt2:要加或者减的坐标。5)缩放坐标使用Point对象的normalize()方法可以实现将原点和当前点之间线段的长度缩放为指定的长度,缩放后原坐标将发生改变,变为缩放后的坐标。其用法格式如下所示。pt.normalize(len:Number):viod参数说明:pt:需要缩放的坐标。len:缩放的长度。6)偏移坐标使用Point对象的offset()方法可以实现当前点坐标偏移一定的水平距离和竖直距离。其用法格式如下所示。pt.offset(dx:Number,dy:Number):viod参数说明:pt:需要偏移的坐标。dx:偏移的横坐标值。dy:偏移的纵坐标值。7)极坐标转Flash坐标在11.1.3中已经说过,在数学中还有一个极坐标系,其坐标使用(r,θ)表示。Flash的坐标系统与其不相同,在使用时需要进行转换。在ActionScript3.0中,polar()方法用于实现极坐标和Flash坐标之间的相互转换,该方法返回转换后的坐标。其用法格式如下:Point.polar(r:Number,angel:Number):Point参数说明:r:极坐标的长度。angel:极坐标的角度。注意:用弧度表示。3.二维向量在第12.1节中介绍过,平面向量可以用坐标来表示,但由于Point类并不能完全实现向量的方法和功能,在这里建立自己的平面向量类V2D,同时介绍向量的基本运算。1)V2D类的构造函数构造函数用于定义向量类的名称V2D,并负责实例化对象。初始化的向量采用坐标表示,需定义两个属性x和y,在这里默认为x=0和y=0。V2D类的构造函数代码如下所示。//定义包packagecom.lzxt{importcom.lzxt.MathD;publicclassV2D{//定义两个属性_x和_ypublicvar_x:Number;publicvar_y:Number;//构造函数publicfunctionV2D(x:Number=0,y:Number=0){this._x=x;this._y=y;}}}2)向量检查方法toString()使用toString()方法,可以返回向量的字符串表示。当V2D向量对象作为字符串输出时,该方法会自动调用。该方法返回一个类似于坐标的表示。方法代码如下所示。//toString格式化输出向量坐标,取三位小数输出,原数值不变publicfunctiontoString():String{varrx:Number=MathD.sround(_x,3);varry:Number=MathD.sround(_y,3);return(+rx+,+ry+);}3)向量重置、复制、比较方法向量的重置方法reset(),就是使用新的值来修改原有的值。方法代码如下所示。//重置publicfunctionreset(xx:Number,yy:Number):void{//使用xx值修改原有的属性_x的值_x=xx;//使用yy值修改原有的属性_y的值_y=yy;}4)向量加法向量相加要遵循平行四边形法则。法则内容表述如下:已知两个从原点点O出发的两个向量OA、OB,以OA、OB为邻边作平行四边形OACB,则以O为起点的对角线OC就是向量OA、OB的和,这种计算法则叫做向量加法的平行四边形法则。如图所示。5)向量减法向量减法的处理方法和向量加法的处理方法类似,只要将两个向量的x分量和y分量相减即可。同样为两个方法,代码如下所示。//减法,在当前向量上减少,改变当前向量publicfunctionminus(v:V2D):void{_x-=v._x;_y-=v._y;}//加法,返回相减后的新向量publicfunctionminusNew(v:V2D):V2D{returnnewV2D(_x-v._x,_y-v._y);}6)向量翻转翻转一个向量,起始就是把该向量旋转180度。具体计算方法为x变为-x,y变为-y。此种方法实现的是向量的大小不变,方向翻转。同样设计了两个方法,代码如下所示。//翻转,翻转当前向量publicfunctionnegate():void{_x=-_x;_y=-_y;}//翻转,翻转产生新向量publicfunctionnegateNew():V2D{returnnewV2D(-_x,-_y);}7)向量缩放向量缩放只改变向量的大小,而保证向量和原向量在同一条直线上,或相同,或相反。向量的缩放按照指定的倍数进行缩放,具体的计算方法是原向量的x分量和y分量都乘以缩放的倍数。如果缩放的倍数为负数,则向量的方向变为相反。两个方法代码如下所示。//缩放,缩放当前向量publicfunctionscale(s:Number):void{_x*=s;_y*=s;}//缩放,返回新向量publicfunctionscaleNew(s:Number):V2D{returnnewV2D(_x*s,_y*s);}8)向量长度向量的长度表示向量的大小,在数学种向量的大小被称为“模”。向量长度的计算就是利用勾股定理计算向量坐标与坐标原点之间的距离。下面定义获取向量长度的方法length(),方法代码如下所示。//获取向量长度publicfunctionlength():Number{returnMath.sqrt(_x*_x+_y*_y);}9)向量角度向量的角度用于指明向量的方向。向量方向的计算是利用反正切函数进行计算,实际计算的是向量坐标点与原点之间连线与x轴之间的夹角。下面的方法getangle()定义获取角度的方法,代码如下所示。//获取向量角度publicfunctiongetangle():Number{returnMathD.atan2(_y,_x);}10)向量旋转向量的旋转也是改变向量的角度,不过此方法是在原有角度的基础上进行角度增加或减少。下面的方法rotate()定义向量旋转的方法,方法代码如下所示。11)向量点乘在物理学中,功的定义为:功等于力和在力的方向上所发生的位移的乘积。在这个定义中,涉及的就是两个向量的乘积,两个向量相乘,得到一个结果,此结果称为向量的点积。在使用用坐标表示的平面向量中,两个向量a(x1,y1)和b(x2,y2)点积的计算公式为:a·b=x1*x2+y1*y2下面定义两个向量点积的方法,代码如下所示。//点积publicfunctiondot(v:V2D):Number{return_x*v._x+_y*v._y;}12)法向量法向量是指和原向量垂直的向量,也就是原向量和新向量之间的夹角是90度。对一个向量来说,与其夹角为90度的向量都有两个,这两个向量在计算中对x属性取反或者对y属性取反,比如向量a(x,y)的法向量有两个:a(-x,y)和a(x,-y)。计算向量的法向量的方法如下,返回一个新的向量——法向量。//法向量publicfunctiongetNormal():V2D{returnnewV2D(-_y,_x);}13)向量夹角计算向量间的交角的过程相对比较复杂,需要利用向量相乘的逆运算来进行。两个向量相乘,可以利用下面的数学公式进行计算:所以要计算两个向量之间的交角,需要对该公式进行变形,变形后的公式为:cos||||baba)||||arccos(baba14)圆边缘碰撞实例向量在物理学中有着非常重要的应用,利用向量,可以方便的处理物体的运动、碰撞、反射等等问题。下面利用向量实现在圆形区域内运动的小球的动画效果。在此效果中,当小球与区域边缘发生碰撞时,实现反射效果,速度的方向和运动的方向都旋转一定的角度。其实现过程和原理为:(1)创建一个圆形区域。(2)创建一个小球,实现小球的运动。小球的运动使用帧循环事件实现。(3)检测小球是否与圆形区域边缘发生碰撞。此检测可以通过检测向量的长度来实现。(4)碰撞后的速度方向的改变。此过程可以先获取速度向量和位移向量的夹角,然后通过向量旋转来实现。

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功