zoukankan      html  css  js  c++  java
  • Managed DirectX +C# 开发(入门篇)(二)


    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,"向量的数乘");     
                  }
    执行结果是:

  • 相关阅读:
    [转]c#匿名类
    MVC中的验证码
    js常用方法
    centos6.x一直停留在进度条的问题
    使用linux flock文件锁实现任务锁定避免计划任务程序冲突
    nginx访问日志的几个统计命令
    centos安装tidy扩展
    用alert打印js对象
    laravel中的管道设计模式
    CentOS查看每个进程的网络流量
  • 原文地址:https://www.cnblogs.com/lcxu2/p/2004039.html
Copyright © 2011-2022 走看看