)Managed DirectX +C# 開發(入門篇)(二)
來源:互聯網
上載者:User
第二章 向量的運算(1)
1:向量相等幾何學上,有同樣方向和長度的兩個向量相等。數學上,我們說有同樣維數和分量的向量相等。例如:如果ux = vx, uy = vy, 且 uz = vz.那麼(ux, uy, uz) = (vx, vy, vz)。在代碼中我們能夠用“= =”判斷兩個向量相等。
2:向量模長向量的大小是有向線段的長度。知道向量的分量,利用下面的公式就能計算出向量的大小。‖u‖表示向量u的長度。例如:計算向量u = (1, 2, 3)和v = (1, 1)的大小。根據公式(1),我們得到:在DirectX中,向量的Length()方法可以得到向量模長,例如:Vector3 vec =new Vector3(1,2,3);MessageBox.Show("向量V(1,2,3)的模長為:/n"+vec.Length().ToString());執行結果:另外一個有用的方法是Vector.LengthSq(),求得的是向量模長的平方,在實際中,它的用途可能超過Length();如果在一個程式中前面需求模長,後面又要對模長平方運算,用此方法就省去了許多計算,我們知道,開平方運算對電腦來說是其實是個痛苦的事情;
3:向量單位化向量單位化就是讓向量的大小等於1,叫作單位向量。能利用向量大小以及各個分量把一個向量單位化:比如,對於向量u = (1, 2, 3) 和 v = (1, 1)。單位化方法如下首先,利用前面的求向量模長公式得到‖u‖=√14 和 ‖v‖=√2,因此:以下代碼是將向量單位化以後,看看向量的值及模長:Vector3 vec =new Vector3(1,2,3); vec.Normalize(); string disString="向量V(1,2,3)單位化以後為:/n"; disString+="V("+vec.X.ToString()+" ,"+vec.Y.ToString()+" ,"+vec.Z.ToString()+")/n"; disString+="單位化以後的模長為:"+vec.Length().ToString(); MessageBox.Show(disString,"向量的單位化");程式執行結果如下:
4:向量相加能夠通過分別把兩個向量的各個分量相加得到向量之和,注意在相加之前必須保證它們有相同的維數。下面圖中顯示的是向量相加幾何表示:以下代碼顯示兩個向量的相加,並把相加後的結果顯示出來: Vector3 vec1 =new Vector3(1,2,3); Vector3 vec2 =new Vector3(3,4,5); Vector3 vec3=Vector3.Add(vec1,vec2); string disString="V(1,2,3)+V(3,4,5):/n"; disString+="V("+vec3.X.ToString()+" ,"+vec3.Y.ToString()+" ,"+vec3.Z.ToString()+")/n"; MessageBox.Show(disString,"向量的相加");執行結果如下:
5:向量相減和加法類似,通過分別把兩個向量的各個分量相減得到向量之差。圖中顯示的是幾何學上的向量相減。以下代碼顯示兩個向量的相減,並把相減後的結果顯示出來:private void VectorSubtract() { Vector3 vec1 =new Vector3(1,2,3); Vector3 vec2 =new Vector3(3,4,5); Vector3 vec3=Vector3.Subtract(vec1,vec2); string disString="V(1,2,3)-V(3,4,5):/n"; disString+="V("+vec3.X.ToString()+" ,"+vec3.Y.ToString()+" ,"+vec3.Z.ToString()+")/n"; MessageBox.Show(disString,"向量的相減"); }執行結果如下:
6:向量的數乘用一個數與向量相乘,向量按比例變化。用負數去乘改變方向。以下代碼計算向量的數乘:private void VectorScale() { Vector3 vec1 =new Vector3(1,2,3); Vector3 vec3=Vector3.Scale (vec1,10); string disString="V(1,2,3)乘以10:/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/1666603.aspx