zoukankan      html  css  js  c++  java
  • 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,"向量叉积");        
             }
    执行结果是:
  • 相关阅读:
    洛谷P2516 [HAOI2010]最长公共子序列 动态规划 容斥原理
    [LeetCode]235. Lowest Common Ancestor of a Binary Search Tree
    [LeetCode]144. Binary Tree Preorder Traversal二叉树前序遍历
    [LeetCode]129. Sum Root to Leaf Numbers路径数字求和
    [leetcode]645. Set Mismatch
    [leetcode]110BalancedBinaryTree平衡二叉树
    [leetcode]199. Binary Tree Right Side View
    [LeetCode]116. Populating Next Right Pointers in Each Node
    [leetcode]720. Longest Word in Dictionary字典中最长的单词
    [LeetCode]690. Employee Importance员工重要信息
  • 原文地址:https://www.cnblogs.com/lcxu2/p/2004038.html
Copyright © 2011-2022 走看看