麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 辦公 > Flash > 正文

AS3教程:Point類計(jì)算兩點(diǎn)間距離

2020-07-17 13:17:50
字體:
供稿:網(wǎng)友
當(dāng)要運(yùn)算兩點(diǎn)距離時(shí),我見不少人都是用最原始的運(yùn)算方法,其實(shí)2.0開始就有了Point類,可以計(jì)算兩點(diǎn)間距離,除此之外,Point類還可用于計(jì)算矢量,某些看似復(fù)雜的計(jì)算,用上Point類就會變得簡單。當(dāng)然,要巧用Point類,必需要有矢量的知識。雖然,3.0的Point類和2.0的區(qū)別不大,但我之所以把這帖放在as3討論區(qū),是因?yàn)閍s3的Point類廣泛地被其他類應(yīng)用。最明顯的是globalToLocal和localToGlobal這兩個(gè)方法,2.0這兩個(gè)方法的參數(shù)和返回值都是Object,但3.0都變?yōu)镻oint類了,使得Point類的應(yīng)用更名正言順了。

廢話少說,言歸正轉(zhuǎn),首先我們看看Point類的屬性:
x:Number——該點(diǎn)的水平坐標(biāo)
y:Number——該點(diǎn)的垂直坐標(biāo)
length:Number——從(0,0)到此點(diǎn)的線段長度(只讀屬性)
從length屬性我們可以看到,實(shí)際上一個(gè)Point類的實(shí)例是一個(gè)以(0,0)為始點(diǎn),以(x,y)為終點(diǎn)的矢量,因此,我們可以應(yīng)用Point類進(jìn)行一些簡單的矢量運(yùn)算。現(xiàn)在我們看看Point類給我們提供什么有用的方法:

distance(pt1:Point, pt2:Point):Number——返回 pt1 和 pt2 之間的距離。這個(gè)就是大家傻傻地用Math.sqart()寫一長串代碼計(jì)算出來的兩點(diǎn)間距離了。

add(v:Point):Point——將另一個(gè)點(diǎn)的坐標(biāo)添加到此點(diǎn)的坐標(biāo)以創(chuàng)建一個(gè)新點(diǎn)。還記得矢量相加的幾何意義嗎?
設(shè)a、b為矢量,則a b=c,圖中矢量c就是矢量a加矢量b的結(jié)果。

這個(gè)用來計(jì)算合力最方便。我們可以把物體的重心放到(0,0)點(diǎn)上,然后可以利用Point類的add方法簡單計(jì)算各種力的合力。你可能會提出一個(gè)問題:如何把力轉(zhuǎn)換成點(diǎn)的坐標(biāo)呢?下面這個(gè)方法可以幫你解決這個(gè)問題。

polar(len:Number, angle:Number):Point——將一對極坐標(biāo)轉(zhuǎn)換為笛卡爾點(diǎn)坐標(biāo)。
學(xué)過物理力學(xué)的人都知道,力是有大小有方向的矢量,而這個(gè)方法正好提供了把力轉(zhuǎn)換成點(diǎn)坐標(biāo)的方法。len就是力的大小,angle就是力角度。轉(zhuǎn)換后計(jì)算合力,得出合力的坐標(biāo)點(diǎn),再讀取這點(diǎn)的length屬性,就可得到合力的大小,再利用Math.atan2(y,x)計(jì)算力的方向。多簡單的運(yùn)算!

offset(dx:Number, dy:Number):void——按指定量偏移 Point 對象。dx 的值將添加到 x 的原始值中以創(chuàng)建新的 x 值。 dy 的值將添加到 y 的原始值中以創(chuàng)建新的 y 值。這個(gè)要和add區(qū)分開來,因?yàn)閛ffset是直接把值加到x、y值上。

subtract(v:Point):Point——從此點(diǎn)的坐標(biāo)中減去另一個(gè)點(diǎn)的坐標(biāo)以創(chuàng)建一個(gè)新點(diǎn)。既然有了加法,當(dāng)然有減法了。看看矢量的減法意義:
設(shè)a、b為矢量,則b-a=c,圖中矢量c就是矢量b減去矢量a的結(jié)果。

用這個(gè)運(yùn)算,你可以方便地只用一個(gè)Point類實(shí)例來記錄某兩點(diǎn)間的距離和斜率。在某些場合,這個(gè)很有用。例如當(dāng)需要計(jì)算和記錄某點(diǎn)集合里各點(diǎn)與其他點(diǎn)之間的關(guān)系時(shí),如果分別運(yùn)算距離和角度,你得用兩個(gè)一一對應(yīng)的數(shù)組記錄,當(dāng)然也可以用一個(gè)多聯(lián)數(shù)組,但絕對比不上用一個(gè)Point類實(shí)例組成的一維數(shù)組簡單得多,如果要對這些結(jié)果進(jìn)行比較或者有下一步運(yùn)算時(shí),用這種方法更顯優(yōu)勢。

interpolate(pt1:Point, pt2:Point, f:Number):Point——確定兩個(gè)指定點(diǎn)之間的點(diǎn)。參數(shù) f 確定新的內(nèi)插點(diǎn)相對于參數(shù) pt1 和 pt2 指定的兩個(gè)端點(diǎn)所處的位置。參數(shù) f 的值越接近 1.0,則內(nèi)插點(diǎn)就越接近第一個(gè)點(diǎn)(參數(shù) pt1)。參數(shù) f 的值越接近 0,則內(nèi)插點(diǎn)就越接近第二個(gè)點(diǎn)(參數(shù) pt2)。
這個(gè)方法更了不起。因?yàn)樗軒臀覀兇_定兩點(diǎn)之間的一點(diǎn),只要我們知道這點(diǎn)在線段中位置。實(shí)際上f是一個(gè)比例值,
f=待定點(diǎn)到pt2的距離/整條線段的長度
這個(gè)用來計(jì)算一些已知比例關(guān)系的點(diǎn)很方便。例如求地圖上的某點(diǎn)在實(shí)際場景上的點(diǎn)坐標(biāo),我們只需選取一段過這點(diǎn)的線段,計(jì)算出f,就可以代入實(shí)際場景中對應(yīng)線段,求出對應(yīng)的點(diǎn)。

normalize(thickness:Number):void——將 (0,0) 和當(dāng)前點(diǎn)之間的線段縮放為設(shè)定的長度。這個(gè)實(shí)際上就是設(shè)置矢量的大小的方法。得到的結(jié)果是矢量的大小變?yōu)樵O(shè)定值,x、y值改變了,但是矢量的方向不變。

從Point類的屬性和方法看,Point類實(shí)際上是一個(gè)徹頭徹尾的矢量類,它幾乎包含了所有關(guān)于矢量的基本運(yùn)算。所以,要計(jì)算矢量,應(yīng)優(yōu)先考慮使用Point類。

PS:順帶說說globalToLocal和localToGlobal,這兩個(gè)方法在as3里是DisplayObject的方法,它們可以方便地隨意地轉(zhuǎn)換不同顯示對象中的相對坐標(biāo),它的參數(shù)和返回值都是Point類實(shí)例,所以在as3里應(yīng)用Point類計(jì)算點(diǎn)與點(diǎn)間的關(guān)系,更具優(yōu)勢。例如mc1中有一點(diǎn)p1(x1,y1),mc2中有一點(diǎn)p2(x2,y2),如果mc1和mc2的關(guān)系很復(fù)雜,要求p1到p2的距離,如果不用這兩個(gè)方法,這個(gè)運(yùn)算就很復(fù)雜,用上它們就簡單得多了,所求的距離d=Point.distance(p2,mc2.globalToLocal(mc1.localToGlobal(p1)));
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 深夜精品福利 | 日本黄色大片免费 | 成人爱爱电影 | 成年人网站视频免费 | 亚洲码无人客一区二区三区 | 男女污污视频网站 | 一本色道久久99精品综合蜜臀 | 欧美成人自拍 | 成人在线观看免费观看 | 在线成人亚洲 | 欧产日产国产精品v | 久久国产精品久久久久久久久久 | 欧美黄色一级带 | 免费毛片在线视频 | japanesexxxx24videofree| 国产乱淫av片免费网站 | 国产精品久久久在线观看 | 日本免费一区二区三区四区 | 欧美日韩在线播放一区 | 精品久久久久久久久亚洲 | 国产日韩在线观看一区 | 成年人在线视频免费 | 日韩视频中文 | 免费观看一区二区三区视频 | 亚洲免费视频大全 | 麻豆视频国产在线观看 | 久久噜噜噜精品国产亚洲综合 | 福利在线免费 | 91香蕉影视 | 护士hd欧美free性xxxx | 日本视频在线播放 | www.48xx.com | 亚洲一级簧片 | 久久久久久久久久久久久国产精品 | 久久精品23 | 天天看成人免费毛片视频 | 久久久久九九九女人毛片 | 国产女厕一区二区三区在线视 | 日韩在线播放中文字幕 | 亚洲第一页中文字幕 | 91成人亚洲 |