zoukankan      html  css  js  c++  java
  • 向量的点积和叉积定义

    向量的点积:

    假设向量u(uxuy)和v(vxvy),uv之间的夹角为α,从三角形的边角关系等式出发,可作出如下简单推导:

      |u - v||u - v| = |u||u| + |v||v| - 2|u||v|cosα   

    ===>
      
      (ux - vx2 + (uy - vy)2  uxuy2 +vx2+vy2- 2|u||v|cosα 

    ===>
       
       -2uxvx - 2uyvy = -2|u||v|cosα

    ===>

       cosα = (uxvx + uyvy) / (|u||v|)

    这样,就可以根据向量uv的坐标值计算出它们之间的夹角。

    定义uv的点积运算: u . v = (uxvx + uyvy),

    上面的cosα可简写成: cosα = u . v / (|u||v|)

    u . v = 0时(即uxvx + uyvy = 0),向量uv垂直;当u . v > 0时,uv之间的夹角为锐角;当u . v < 0时,uv之间的夹角为钝角。

    可以将运算从2维推广到3维。



    向量的叉积:

    假设存在向量u(uxuyuz), v(vxvyvz), 求同时垂直于向量uv的向量w(wxwywz).

    因为wu垂直,同时wv垂直,所以w . u = 0, w . v = 0; 即

    uxwx + uywy + uzwz = 0;
    vxwx + vywy + vzwz = 0;

    分别削去方程组的wywx变量的系数,得到如下两个等价方程式:

    (uxvy - uyvx)wx = (uyvz - uzvy)wz
    (uxvy - uyvx)wy = (uzvx - uxvz)wz

    于是向量w的一般解形式为:

    w = (wxwywz) = ((uyvz - uzvy)wz / (uxvy - uyvx), (uzvx - uxvz)wz / (uxvy - uyvx), wz)
      = (wz / (uxvy - uyvx) * (uyvz - uzvyuzvx - uxvzuxvy - uyvx))

    因为:

       ux(uyvz - uzvy) + uy(uzvx - uxvz) + uz(uxvy - uyvx)
     = uxuyvz - uxuzvy + uyuzvx - uyuxvz + uzuxvy - uzuyvx
     = (uxuyvz - uyuxvz) + (uyuzvx - uzuyvx) + (uzuxvy - uxuzvy)   
     = 0 + 0 + 0 = 0

       vx(uyvz - uzvy) + vy(uzvx - uxvz) + vz(uxvy - uyvx)   
     = vxuyvz - vxuzvy + vyuzvx - vyuxvz + vzuxvy - vzuyvx
     = (vxuyvz - vzuyvx) + (vyuzvx - vxuzvy) + (vzuxvy - vyuxvz)
     = 0 + 0 + 0 = 0

    由此可知,向量(uyvz - uzvyuzvx - uxvzuxvy - uyvx)是同时垂直于向量uv的。

    为此,定义向量u = (uxuyuz)和向量 v = (vxvyvz)的叉积运算为:u x v = (uyvz - uzvyuzvx -uxvzuxvy - uyvx)

    上面计算的结果可简单概括为:向量x v垂直于向量uv


    根据叉积的定义,沿x坐标轴的向量i = (1, 0, 0)和沿y坐标轴的向量j = (0, 1, 0)的叉积为:

     i x j = (1, 0, 0) x (0, 1, 0) = (0 * 0 - 0 * 1, 0 * 0 - 1 * 0, 1 * 1 - 0 * 0) = (0, 0, 1) = k

    同理可计算j x k:
     
     j x k = (0, 1, 0) x (0, 0, 1) = (1 * 1 - 0 * 0, 0 * 0 - 0 * 1, 0 * 0 - 0 * 0) = (1, 0, 0) = i

    以及k x i:

     k x i = (0, 0, 1) x (1, 0, 0) = (0 * 0 - 1 * 0, 1 * 1 - 0 * 0, 0 * 0 - 0 * 0) = (0, 1, 0) = j

    由叉积的定义,可知:

     v x u = (vyuz - vzuyvzux - vxuzvxuy - vyux) = - (u x v)

    求两点的向量

    假设A(X1,Y1)B(X2,Y2) 、O(0,0)原点 那么向量AB=OB-OA=B-A=(X2-X1,Y2-Y1),方向是A->B
     
    向量的大小,也就是向量的长度(或称)。向量a的模记作|a|。
    注:
    1.向量的模是非负实数,是可以比较大小的。向量a=(x,y), |a|=根号下(x^2+y^2)。
    2.因为方向不能比较大小,所以向量也就不能比较大小。对于向量来说“大于”和“小于”的概念是没有意义的。例如,“向量AB>向量CD”是没有意义的。
     

    C++中弧度和角度转换

    设角度为A,弧度为B,则
    角度转弧度: B = A /180 * pi;
    弧度转角度: A = B /pi * 180.
    其中pi是圆周率。
  • 相关阅读:
    4.nmap常用命令备忘录
    1.封神台sql注入实战靶场
    第一章、为了女神小芳
    2.kali部署vulhub
    5.docker可视化
    6.docker精髓
    【Rust】引用模式
    【Rust】虚类型测试
    【Rust】可变借用
    【Rust】虚类型参数
  • 原文地址:https://www.cnblogs.com/kissfu/p/3365288.html
Copyright © 2011-2022 走看看