Managed DirectX +C# 开发(入门篇)(三)

  第二章 向量的运算(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," 向量叉积");        
         }
执行结果是:
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值