as3 Point
首先我们看看Point类的属性:
x:Number——该点的水平坐标
y:Number——该点的垂直坐标
length:Number——从(0,0)到此点的线段长度(只读属性)
从length属性我们可以看到,实际上一个Point类的实例是一个以(0,0)为始点,以(x,y)为终点的矢量,因此,我们可以应用Point类进行一些简单的矢量运算。现在我们看看Point类给我们提供什么有用的方法:
distance(pt1:Point,
pt2:Point):Number——返回 pt1 和 pt2
之间的距离。这个就是大家傻傻地用Math.sqart()写一长串代码计算出来的两点间距离了。
add(v:Point):Point——将另一个点的坐标添加到此点的坐标以创建一个新点。还记得矢量相加的几何意义吗?
设a、b为矢量,则a
b=c,图中矢量c就是矢量a加矢量b的结果。
这个用来计算合力最方便。我们可以把物体的重心放到(0,0)点上,然后可以利用Point类的add方法简单计算各种力的合力。你可能会提出一个问题:如何把力转换成点的坐标呢?下面这个方法可以帮你解决这个问题。
polar(len:Number,
angle:Number):Point——将一对极坐标转换为笛卡尔点坐标。
学过物理力学的人都知道,力是有大小有方向的矢量,而这个方法正好提供了把力转换成点坐标的方法。len就是力的大小,angle就是力角度。转换后计算合力,得出合力的坐标点,再读取这点的length属性,就可得到合力的大小,再利用Math.atan2(y,x)计算力的方向。多简单的运算!
offset(dx:Number,
dy:Number):void——按指定量偏移 Point 对象。dx 的值将添加到 x 的原始值中以创建新的 x 值。
dy 的值将添加到 y 的原始值中以创建新的 y
值。这个要和add区分开来,因为offset是直接把值加到x、y值上。
subtract(v:Point):Point——从此点的坐标中减去另一个点的坐标以创建一个新点。既然有了加法,当然有减法了。看看矢量的减法意义:
设a、b为矢量,则b-a=c,图中矢量c就是矢量b减去矢量a的结果。
用这个运算,你可以方便地只用一个Point类实例来记录某两点间的距离和斜率。在某些场合,这个很有用。例如当需要计算和记录某点集合里各点与其他点之间的关系时,如果分别运算距离和角度,你得用两个一一对应的数组记录,当然也可以用一个多联数组,但绝对比不上用一个Point类实例组成的一维数组简单得多,如果要对这些结果进行比较或者有下一步运算时,用这种方法更显优势。
interpolate(pt1:Point,
pt2:Point, f:Number):Point——确定两个指定点之间的点。参数 f 确定新的内插点相对于参数 pt1 和 pt2
指定的两个端点所处的位置。参数 f 的值越接近 1.0,则内插点就越接近第一个点(参数 pt1)。参数 f 的值越接近 0,则内插点就越接近第二个点(参数
pt2)。
这个方法更了不起。因为它能帮我们确定两点之间的一点,只要我们知道这点在线段中位置。实际上f是一个比例值,
f=待定点到pt2的距离/整条线段的长度
这个用来计算一些已知比例关系的点很方便。例如求地图上的某点在实际场景上的点坐标,我们只需选取一段过这点的线段,计算出f,就可以代入实际场景中对应线段,求出对应的点。
normalize(thickness:Number):void——将
(0,0)
和当前点之间的线段缩放为设定的长度。这个实际上就是设置矢量的大小的方法。得到的结果是矢量的大小变为设定值,x、y值改变了,但是矢量的方向不变。
从Point类的属性和方法看,Point类实际上是一个彻头彻尾的矢量类,它几乎包含了所有关于矢量的基本运算。所以,要计算矢量,应优先考虑使用Point类。
PS:顺带说说globalToLocal和localToGlobal,这两个方法在as3里是DisplayObject的方法,它们可以方便地随意地转换不同显示对象中的相对坐标,它的参数和返回值都是Point类实例,所以在as3里应用Point类计算点与点间的关系,更具优势。例如mc1中有一点p1(x1,y1),mc2中有一点p2(x2,y2),如果mc1和mc2的关系很复杂,要求p1到p2的距离,如果不用这两个方法,这个运算就很复杂,用上它们就简单得多了,所求的距离d=Point.distance(p2,mc2.globalToLocal(mc1.localToGlobal(p1)));
as3 Point的更多相关文章
- [转]关于AS3 Socket和TCP不得不说的三两事
磨刀不误砍柴工,让我们从概念入手,逐步深入. 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络 ...
- as3正则表达式
1.新建正则表达式,有两种方式var exp1:RegExp = new RegExp("ABCD","g");var exp2 = /ABCD/g;//g g ...
- [转]AS3 int uint Number
转自:http://luhantu.iteye.com/blog/1910301 AS3 int uint Number 博客分类: AS3 flex number 类型 1) int 类可使用表示 ...
- AS3和js相互通信要点分析
目标:在html页面里可以使用事件来影响到swf文件的内容,swf文件也可以影响html里js代码的内容 一.新建flash文件,用Flash CC试用版新建一个TextArea.fla的源文件,不添 ...
- 关于as3调用js报“null为空或不是对象”错误
主要原因是:flash插件的object对象无ID属性. 顺便说下as3调用js的方法. as3引用: import flash.external.ExternalInterface; as3中调用 ...
- 在as3中使用protobuf
在最近参与开发的adobe air项目中,前后端的通信协议从XML.JSON再到protobuf,最后选择protobuf原因,主要是前后端维护protobuf协议就行了,同时还可以利用IDE做一些编 ...
- [AS3.0] HTMLLoader与js交互
HtmlLoader 的属性window是加载到 HTML 控件中的内容的全局 JavaScript 对象,通过这个对象能够方便的和页面js通讯. AS代码: import flash.html.HT ...
- [ActionScript 3.0] AS3.0和AS2.0的相互通信
AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) ...
- AS3 从外部SWF中获取资源的方法(ApplicationDomain的使用)
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; ...
- [AS3]as3画笔实例实现橡皮擦功能源代码
[AS3]as3画笔实例实现橡皮擦功能源代码 //主容器 var main:Sprite = new Sprite(); main.mouseEnabled = false; addChild(mai ...
随机推荐
- DigitalOcean上SSH Key的创建(附DigitalOcean邀请)
DigitalOcean是一家云主机商家,最低配置512M内存,20G的SSD,每月只有5刀.半个月前刚刚在这上面买了一个VPS,创建Droplet的时候看见创建SSH Key的时候就有点懵,不知道这 ...
- 常用 windows运行命令
winver---------检查Windows版本 wmimgmt.msc----打开windows管理体系结构(WMI) wupdmgr--------windows更新程序 wscript--- ...
- SharePoint 使用代码为页面添加WebPart
传统的SharePoint实施中,我们通常会创建SharePoint页面,然后添加webpartzone,而后在上面添加webpart:但是有些情况下,也要求我们使用代码,将webpart添加到相应w ...
- 基本完成了一个SEGY扫描程序
利用Seismic.NET编写了一个SEG-Y文件的扫描程序,可以自动判断道头字中主测线号.横测线号.X坐标和Y坐标的位置,自动快速扫描地震数据体中的拐点坐标.10GB多的数据体几十秒全部扫描完成! ...
- iOS开发 使用RMStore简化内购代码 + 内购买订单验证
现在很多的app里面都添加了应用内购买,网上关于苹果证书的生成和设置的教程比较多,这里就不多赘述了,推荐几个个人觉得说的比较详细的网址: http://www.jianshu.com/p/86ac7d ...
- 每日Scrum--No.5
Yesterday:学习并编写代码 Today:组织小组开一次阶段性的总结会议:讨论需求分析中存在的问题:继续学习和编写代码:总结前阶段代码出现的问题 Problem:编程要注意很多的特殊情况,程序成 ...
- 一个超复杂的间接递归——C语言初学者代码中的常见错误与瑕疵(6)
问题: 问题出处见 C语言初学者代码中的常见错误与瑕疵(5) . 在该文的最后,曾提到完成的代码还有进一步改进的余地.本文完成了这个改进.所以本文讨论的并不是初学者代码中的常见错误与瑕疵,而是对我自己 ...
- 连接Oracle远程数据库错误:ORA-12541,ORA-12514,ORA-01017的解决方法!
1.出现如下错误:ORA-12541:TNS:no listener,如下图所示: 错误原因是我们没有开启Listener监听器服务,解决方法是在服务中开启这个服务,如下图所示. 2.出现如下错误:O ...
- 【整理贴】DBA-常用到的动态视图分析语句
测试应用环境:SQL2008 R2.SQL2012.SQL2014 --语句1:获取前20逻辑读取次数或逻辑写入次数或CPU 时间 SELECT TOP 20 SUBSTRING(qt.TEXT, ( ...
- cocos2d-x之事件传递
bool HelloWorld::init() { if ( !Layer::init() ) { return false; } Size size=Director::getInstance()- ...