向量運算簡介

2021-04-12 16:08:52 字數 1788 閱讀 1658

向量運算簡介

作 者:老赫

如果不好好學,那麼下回我介紹乙個3d engine的時候你就麻煩大了。

質量保證:

只討論可以任意平移自由向量

以下原理適於你個人開發的3d系統,d3d系統,opengl系統

一.兩點距離

2d系統:

point1(x1,y1),point2(x2,y2)

距離d=sqr( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) )

3d系統:

point1(x1, y1, z1),point2(x2, y2, z2)

xd = x2-x1

yd = y2-y1

zd = z2-z1

距離distance = squareroot(xd*xd + yd*yd + zd*zd)

做遊戲和demo永遠不要去做開方:

1.用lut查表技術(look up table )

2.在做碰撞檢測時,誤差distance*distance二規格化,單位化(normalize)

先要說向量的長度:

向量vector(x,y,z)

向量長度length(vector)= |vector|=sqr(x*x+y*y+z*z)

normalize後:

(x/length(vector),y/length(vector),z/length(vector))

方向不變,長度為1個單位

三.點乘 點積 數量積(dot product)

是一回事兒.首先明確兩個向量的點積是個標量.

中學物理的力做功就是向量點積的例子:w=|f|.|s|.cos(theta)

二向量點積:

vector1:(x1,y1,z1) vector2(x2,y2,z2)

dotproduct=x1*x2+y1*y2+z1*z2

很重要的應用:

1.求二向量余弦:

由我們最熟悉的力做功:

cos(theta)=f.s/(|f|.|s|)

可以判斷二向量的方向情況: cos=1同向,cos=-1相反,cos=0直角

曲面消隱(cull face)時判斷物體表面是否可見:(法線和視線向量的方向問題)cos>0不可見,cos<0可見

opengl就是這麼做的。

2.lambert定理求光照強度也用點積:

light=k.i.cos(theta)

k,i為常數,theta是平面法線與入射光線夾角

老王頭的fast bump(add hyper link here)也就是依據這個數學模型.但是他用了個很cheap的hack來模擬cosine

四.叉乘(cross product)

叉乘:vector1(x1,y1,z1),vector2(x2,y2,z2):

其結果是個向量.

方向是vector1,vector2構成的平面法線.再使用右手定則

長度是length(vector1)*length(vector2)*sin(theta)

theta是vector1 & vector2的夾角.

所以,平行的向量叉乘結果為0向量(長為0,方向任意)

計算結果向量:(ox,oy,oz)

ox = (y1 * z2) - (y2 * z1)

oy = (z1 * x2) - (z2 * x1)

oz = (x1 * y2) - (x2 * y1)

用途:計算法向量,這是生成3d圖形的很關鍵一步。

學會了?好樣的!你又重新達到了大學一年級的水平~~~~~~~~~~~~

向量運算簡介 by 老赫

如果不好好學,那麼下回我介紹乙個3d engine的時候你就麻煩大了.質量保證 只討論可以任意平移自由向量 以下原理適於你個人開發的3d系統,d3d系統,opengl系統 一.兩點距離 2d系統 point1 x1,y1 point2 x2,y2 距離d sqr x1 x2 x1 x2 y1 y2 ...

詞向量簡介

1.什麼是詞向量?每乙個詞典 裡面存著一堆單詞,例如 用nn.embedding模組進行詞嵌入 輸出的就是對應的詞向量。2.什麼是 nn.embedding torch.nn.embedding理解 看這個解釋 3.如何訓練乙個詞向量?skip gram 模型 雖然這個任務並沒有什麼卵用,但它可以幫...

向量的運算

因為必修4沒有學好導致計算幾何掛掉了,所以來補一補tat 1.自由 向量的定義 起始點任意,方向和長度固定的有向線段。2.向量的代數表示 向量a記作a 3.向量的幾何表示 可以用乙個有向線段來表示向量。我們現在先要證明平面向量基本定理 定理內容 對於平面向量a mi nj 其中i j 為任意兩個不共...