第二章 向量的運算(2)
7:向量的最大與最小值最大值是從兩個向量X,Y,Z值中分別取出最大值組成一個新向量;最小值是從兩個向量X,Y,Z值中分別取出最小值組成一個新向量;看以下代碼: private void VectorMax() { Vector3 vec1 =new Vector3(6,2,3); Vector3 vec2= new Vector3(1,2,5); Vector3 vec3=Vector3.Maximize (vec1,vec2); string disString="V(6,2,3)與V(1,2,5)最大值:/n"; disString+="V("+vec3.X.ToString()+" ,"+vec3.Y.ToString()+" ,"+vec3.Z.ToString()+")/n"; MessageBox.Show(disString,"向量最大值"); }執行結果為:
8:求兩個向量間的一個插值向量設有兩個向量pLeft,pRight,得到的向量值計算公式為:pLeft + interpolater(pRight - pLeft).舉例代碼如下:private void VectorLerp() { Vector3 vec1 =new Vector3(6,2,3); Vector3 vec2= new Vector3(1,2,5); Vector3 vec3=Vector3.Lerp(vec1,vec2,0.5f); string disString="V(6,2,3)與V(1,2,5)之間的一個插值向量:/n"; disString+="V("+vec3.X.ToString()+" ,"+vec3.Y.ToString()+" ,"+vec3.Z.ToString()+")/n"; MessageBox.Show(disString,"插值向量"); }執行結果:顯然 3.5=6+(1-6)*0.5;2=2+(2-2)*0.5;4=3+(5-3)*0.5;
9:點積數學上定義點積是兩個向量的乘積。按下面等式計算: 點積有一個重要的定理稱為餘弦定律;u ? v =|u||v|cosθ,表示兩個向量的點積是它們的模長和夾角的餘弦之積。因此,如果u 和v都是單位向量,那麼u ? v就是它們夾角的餘弦。一些點積有用的特性(1)u ? v = 0,那麼u⊥v。(2)u ? v > 0,那麼兩個向量的角度θ小於90度。(3)u ? v < 0,那麼兩個向量的角度θ大於90度。比如以下求兩個向量的點積樣本:private void VectorDot() { Vector3 vec1 =new Vector3(6,2,3); Vector3 vec2= new Vector3(1,2,5); float dotValue=Vector3.Dot(vec1,vec2); string disString="V(6,2,3)與V(1,2,5)的點積:/n"+dotValue.ToString(); MessageBox.Show(disString,"向量點積"); }執行結果如下:
10:叉積通過把兩個向量u和v相乘的到另一的向量p.把u和v兩個向量通過十字相乘得到向量p,向量p垂直於u和v。也就是說向量p垂直於u並且垂直於v。計算公式是: 也就是,得到後來的向量X,Y,Z值分別是: 注意:向量p垂直於u 和v所決定的平面,至於方向因左右手座標系不同而不同;以下代碼為在XOY平面內兩個向量作叉積,最後返回的值垂直於XOY平面,也就是說平行於Z軸; private void VectorCross() { Vector3 vec1 =new Vector3(6,4,0); Vector3 vec2= new Vector3(-1,2,0); Vector3 vec3=Vector3.Cross(vec1,vec2); string disString="V(6,4,0)與V(-1,2,0)的叉積:/n"; disString+="V("+vec3.X.ToString()+" ,"+vec3.Y.ToString()+" ,"+vec3.Z.ToString()+")/n"; MessageBox.Show(disString,"向量叉積"); }執行結果是:轉自:dandancool http://blog.csdn.net/dandancool/archive/2007/06/26/1666609.aspx