zoukankan      html  css  js  c++  java
  • 3D空间基础概念之一:点、向量(矢量)和齐次坐标

      1.        点和向量的区别

    点是三维空间中的某个坐标,是绝对的,它的值是参照原点的,而向量用于表示力和速度等具有方向和大小的量, 通常用具有长度和方向的线段来表示,虽然他们都具有三个分量,但对于向量,如果将向量放在坐标系中的任何位置(平移),都不会改变其性质,因为向量表示的是方向和大小,与位置距离无关,它的值是相对与基准点的。下图是三维顶点和向量的数学符号或称为列矩阵。

     
     

     在二维平面中只要将cz设置为0即可

    2.        向量的获取

    使用两个点的坐标就可以计算向量,假设有两点P1和P2,以P1作为基准点,向量V=P2-P1,假如以P2作为基准点,则向量V=P1-P2,总之V=P-Pb,Pb为基准点。

    V=P-Pb=(x-xb,y-yb,z-zb)=(a,b,c)

    举例:假设P1=(1,2,3),P2=(2,2,2),将P2看作基准点,那么根据公式:

    V=P1-P2=(1-2,2-2,3-2)=(-1,0,1)

    可以看出,虽然P1和P2的三个分量都处于正轴,但是由于基准点取的是P2,所以V的向量在x方向上为指向x轴的负轴,而V的b值是0,因此向量处于一个XZ平面上,如图:

     

    将V放入坐标中

     

    从图中也可以看出,无论向量处于何处,其方向和大小是不会改变的。

    3.        向量的绝对值

    向量的绝对值就是向量的长度,也称模,计算公式为:

     

    将上例中V的分量代入|V|=sqrt (-1^2+0^2+1^2)=sqrt(2)=1.414…

    4.        单位向量

    单位向量就是模(向量长度)为1的向量,也就是某向量每单位长度的向量。单位向量u的计算公式为:

     

             设|V|=L公式分解如下:

    =( a , b , c )/L

    =( a/L , b/L , c/L )

    =( au, bu , cu )

    因此,上面例子中的的单位向量为:

    U=(-1,0,1)/1.414=( -1/1.414 , 0 , 1/1.414 )

    =( -0.707 , 0 , 0.707)

    5.        齐次坐标

    在进行坐标和向量计算中,为了不至于混淆点和向量,另外,在进行几何变换时,为了加快运算速度,简化计算,往往使用矩阵,而在使用矩阵运算时,矩阵的乘积只能表示旋转、比例和剪切等等变换,而不能表示平移变换。因此为统一计算(使用齐次坐标在数学中的意义还要广),引入了第四个分量w,这使得原本二维坐标变成三维坐标,同理三维坐标变为四维坐标,而w称为比例因子,当w不为0时(一般设1),表示一个坐标,一个三维坐标的三个分量x,y,z用齐次坐标表示为变为x,y,z,w的四维空间,变换成三维坐标是方式是x/w,y/w,z/w,当w为0时,在数学上代表无穷远点,即并非一个具体的坐标位置,而是一个具有大小和方向的向量。从而,通过w我们就可以用同一系统表示两种不同的量。

    在OPENGL中,作为坐标点时,w参数为1,否则为0,如此一来,所有的几何变换和向量运算都可以用相同的矩阵乘积进行运算和变换,当一个向量和一个矩阵相乘时所得的结果也是向量。

  • 相关阅读:
    [GL]行星运行1
    一个图的带权邻接表存储结构的应用
    [GDAL]3.影像金字塔构建
    [GDAL]1.GDAL1.8.1编译与第一个程序
    [GDAL]2.读取栅格和矢量数据
    C#迭代器
    GoogleEarth缓存机制探索
    AE开发三维的不足!
    [GDAL]4.影像的读取和显示
    [STL学习]1.概述
  • 原文地址:https://www.cnblogs.com/CodeBlove/p/1319563.html
Copyright © 2011-2022 走看看