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

2019-10-08 17:09:33王振洲


用这个运算,你可以方便地只用一个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)));