日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity游戏开发中的向量运算-点乘和叉乘

發(fā)布時(shí)間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity游戏开发中的向量运算-点乘和叉乘 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Unity游戲開發(fā)中的向量運(yùn)算-點(diǎn)乘和叉乘

1.點(diǎn)乘:

定義:

又稱點(diǎn)積、數(shù)量積、標(biāo)量積。既可以由向量坐標(biāo)的代數(shù)運(yùn)算得出,也可以通過引入兩個(gè)向量的長(zhǎng)度和角度等幾何概念來求解。

公式一:

?公式二:

點(diǎn)積滿足交換律,即?a?b = b?a

通過點(diǎn)積公式可以看出,a,b都是標(biāo)量,都是正數(shù),余弦值結(jié)果只受角度變化的影響。所以,游戲開發(fā)中經(jīng)常對(duì)向量a、b進(jìn)行歸一化,即當(dāng)兩個(gè)單位向量的長(zhǎng)度都是1時(shí),點(diǎn)乘的結(jié)果就是他們夾角的余弦值,最后可以反余弦求得向量的夾角 θ = arccos(a?b),注意這里得到的是弧度值,需要再乘以Mathf.Rad2Deg才能得到最終的角度。這個(gè)結(jié)果也可以通過Vector3.Angle(a,b)直接得出。

?由余弦函數(shù)曲線可以看出:當(dāng)夾角小于90,余弦值大于0;當(dāng)夾角大于90,余弦值小于0。

游戲中的應(yīng)用:

1.判斷敵人在我們前方或者后方?

我們以自己為原點(diǎn),問題就可以轉(zhuǎn)化為,計(jì)算我們的正前方(Vector3.forward)和原點(diǎn)指向敵人位置的向量的點(diǎn)積。當(dāng)結(jié)果大于0時(shí),說明敵人與我們正前方夾角小于90度,敵人在我們前面,當(dāng)結(jié)果小于0時(shí),說明敵人與我們正前方夾角大于90度,敵人在我們后面。

2.已知敵我位置,自己的視角θ范圍,判斷敵人是否在視角內(nèi)?

同樣以自己為原點(diǎn),首先可以求得正前方向量和指向敵人位置的向量之間的夾角α,因?yàn)樽笥乙暯鞘瞧椒值?#xff0c;我們只需要比較α和θ/2的大小就可以判斷出結(jié)果了。由根據(jù)余弦值在(0,π)是單調(diào)遞減的,所以可以通過直接比較cos值的大小來比較θ值的大小,不需要通過反余弦來計(jì)算真實(shí)角度值。即當(dāng)cos(α) > cos(θ/2)時(shí),敵人在我們視角內(nèi);當(dāng)cos(α) < cos(θ/2)時(shí),敵人在我們視角外。

?2.叉乘:

定義:

向量積,數(shù)學(xué)中又稱外積、叉積,物理中稱矢積、叉乘,是一種在向量空間中向量的二元運(yùn)算。與點(diǎn)積不同,它的運(yùn)算結(jié)果是一個(gè)向量而不是一個(gè)標(biāo)量。并且兩個(gè)向量的叉積與這兩個(gè)向量和垂直。同樣既可以由向量坐標(biāo)的代數(shù)運(yùn)算得出,也可以通過引入兩個(gè)向量的長(zhǎng)度和角度等幾何概念來求解。

?公式一:

?公式二:

該結(jié)果為向量積的模長(zhǎng),其中0° < θ < 180°,方向在unity中由左手法則得出。

?

?叉乘不滿足交換律,滿足反交換律,即?axb = -(bxa)

根據(jù)左手定則可以看出,叉乘結(jié)果大于0時(shí),第二個(gè)向量在第一個(gè)向量右邊,叉乘結(jié)果小于0時(shí),第二個(gè)向量在第一個(gè)向量左邊。

?根據(jù)叉乘的定義,這兩個(gè)只在XY平面的向量的叉乘,必然為一個(gè)只在Z軸(垂直于XY平面)上有值的向量,所以可以把2D向量的叉乘簡(jiǎn)化為一個(gè)只表示Z值的標(biāo)量。

所以2D向量的叉乘可以定義為:

?這個(gè)公式的幾何意義就是如果以向量a和b為邊構(gòu)成一個(gè)平行四邊形,那么a和b的叉乘的結(jié)果就是這個(gè)平行四邊形的面積。

游戲中的應(yīng)用:

判斷最優(yōu)轉(zhuǎn)向敵人問題

以自己為原點(diǎn),計(jì)算自己正前方和指向敵人的向量的叉乘,如果結(jié)果大于0,說明敵人在我們右手邊,小于0則在我們左手邊。

3.總結(jié):

簡(jiǎn)單來說,在兩個(gè)物體的位置關(guān)系判斷中。

點(diǎn)乘可以判斷出目標(biāo)物體在我的前方還是后方。大于零在前方,小于零在后方。

叉乘可以判斷出目標(biāo)物體在我的左邊還是右邊。大于零在右方,小于零在左方。

?參考文章:

向量運(yùn)算在游戲開發(fā)中的應(yīng)用和思考

Unity游戲開發(fā)——向量運(yùn)算(點(diǎn)乘和叉乘)

總結(jié)

以上是生活随笔為你收集整理的Unity游戏开发中的向量运算-点乘和叉乘的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。