AS3教程:点类计算两点之间的距离

点评:当计算两点之间的距离,我看到很多人使用的是最原始的操作方法,实际上是2班的开始点,可以计算出另外两个点之间的距离,也可以用来计算向量,一些看似复杂的计算,使用点类将变得简单。当然,使用点类,它必须有载体的知识。虽然,3点班和2区别不大




当计算两点之间的距离,我看到很多人使用的是最原始的操作方法,实际上是2班的开始点,可以计算出另外两个点之间的距离,也可以用来计算向量,一些看似复杂的计算,使用点类变得简单。当然,使用点类,它必须有载体的知识。虽然3点班和2都不是很不同,我把这个帖子在AS3讨论区因为AS3点类其他类广泛使用。最明显的是两方法的全局的转成本地的和本地到全局坐标,2个参数的方法,返回值为对象,但是,3个已经成为一个点类,点类使应用程序更有理由。

别废话了,抓住要点,让我们看看点类的属性:
X:numbermdash;mdash;该点的横坐标
Y:numbermdash;mdash;该点的纵坐标
长度:numbermdash;mdash;线长度(只读属性)这一点从(0,0)这一点
从长度的属性,我们可以看到,事实上,一个点的类的一个实例是一个矢量,从(0,0)和结束(x,y)。因此,我们可以使用点类来做一些简单的向量运算:

距离(PT1,PT2::点):numbermdash;mdash;返回Pt1和Pt2之间的距离。这是每个人都愚蠢地使用距离Math.sqart()写了一长串的代码。

添加(V:点):pointmdash;mdash;加上其他点的坐标,该坐标点创建一个新的点。你记得的向量加法的几何意义吗

这是计算合力的最方便的方法。我们可以把物体的重心放在(0,0)点,然后使用Add方法的Point类计算各种力的合力。你可能会问一个问题:你如何将力成点坐标下面的方法可以帮助你解决这个问题。

极性(Len:数、角数):pointmdash;mdash;将一对极坐标到直角坐标。
学过物理力学的人都知道,力是一个矢量的方向和大小,这种方法只是提供了一种方法,将力量转化为点的坐标。Len是力量的大小,和角的力角。经过改造后的合力的计算,得出合力坐标点。在阅读这一点的长度属性,我们可以得到合力的大小,然后用math.atan2(Y,X)计算力的方向是一个简单的操作!

偏移(DX:数量、Dy:数):voidmdash;mdash;偏移点对象按指定的数量,DX的值将被添加到X中创建一个新的X值的原始值,Dy的值将被添加到Y来创建一个新的Y值原来的价值。这是区别于添加,偏移量是直接添加到X和Y的值

减(V:点):pointmdash;mdash;其他的点的坐标减去的点的坐标来创建一个新的起点。自除,当然,有一个减法。看看这个向量减法的意义:

此操作,你可以只使用一个Point类实例记录距离和坡度的两点之间,在某些情况下,这是非常有用的,例如当你需要计算和记录的一个点集的点和点之间的关系,如果距离和角度的计算,你必须使用两对应一个记录数组,当然也可以使用多个阵列,但绝对不是一个一维数组由Point类的更简单的例子,如果你想比较这些结果或下一步的操作,这种方法具有更大的优势。

插值(PT1,PT2::点,F数):pointmdash;mdash;确定两个指定点之间的点。f确定位置的新插入点的相对的两个端点分配参数越接近PT1和PT2,参数F值是1,这更多的插值点接近第一点(参数pT1)。越接近参数F值是0,越是接近插值点的第二点(参数pt2)。
这个方法更令人惊奇,因为它可以帮助我们在两点之间确定一个点,只要我们知道线段的位置,实际上F是一个比例值。
F =距离确定点的PT2 /整个线段的长度
这一点是计算的一些点与已知的比例非常方便。例如,如果我们想找的点在地图上某一点的坐标,我们只需要选择一段本线计算F,然后我们可以替代实际场景中相应的线段,和找出相应的点。

规范(厚度:数):voidmdash;mdash;标度的线段之间的(0,0)和当前点设定长度。这实际上是一种集向量的大小。结果是,向量的大小成为一个定值,与X和Y值的变化,但该矢量的方向是不变的。

从点类的属性和方法来看,点类实际上是一个直通向量类,它包含了几乎所有关于向量的基本运算,因此,要计算向量,就要优先使用点类。

PS:通过全局的转成本地的和本地到全局坐标的方式,两方法是DisplayObject在AS3中,他们可以自由转换的相对坐标不同的显示对象,其参数和返回值的类的实例,所以在as3应用计算点与点之间的角度,更大的优势。例如,1有点P1(x1,y1),P2(x2,y2)MC2 MC1、MC2,如果之间的关系非常复杂,需要P1 P2,如果这两种方法不,这个操作是非常复杂的,他们更简单的距离d = point.distance(P2,mc2.globaltolocal(mc1.localtoglobal(P1)));