zoukankan      html  css  js  c++  java
  • 矩阵的三维变换(转)

    http://learn.gxtc.edu.cn/NCourse/jxcamcad/cadcam/Mains/main16-2.htm

    2.3.6 三维变换
        对三维空间的点P=[X Y Z],采用规范齐次坐标则与二维情况类似,其平移交换和比例变换的变换矩阵分别为:
    image
    其中tx,ty,tz分别是沿x、y、z方向的平移量S11、S22和S33分别是在x、y、z方向上相对于原点的比例因子。三维旋转变换稍微复杂,采用右手坐标系,从规定的坐标轴正方向向原点看,绕该轴逆时针方向为正,顺时针方向为负。绕Z轴、X轴和Y轴旋转θ角的变换矩阵分别为:
    image
    数学上可证明,旋转变换中前三行和前三列组成的3X3子矩阵是一正交矩阵,即三个列(行)向量均为单位向量,互相正交,而且三个列向量经过该旋转变换后,分别与X轴、Y轴和Z轴重合。利用这个性质有时可很容易确定旋转变换矩阵。
        三维几何变换与二维变换一样,也都是由一系列基本变换构成的复合变换。在进行变换过程中同样要注意变换矩阵的次序。虽然,有些变换矩阵与其次序无关,但从程序设计及计算的角度出发,建议读者一律采取按次序进行矩阵运算。三维变换矩阵中的大多数元素的作用读者已经了解,但其最后一列的元素在变换中起什么作用?这将在透视变换一节中得到解答。

    2.3.7 三维透视变换
    三维齐次几何变换矩阵中第四列元素组成的3x1子矩阵与透视交换有关,其中的元素称为透视参数。对空间任意点的透视变换为
    image
    上式中分母px+qy+rz+l是一个变量,故经透视变换后图形产生了变形。参数p、q、r如何对图形产生透视变换的呢?为简化问题,先设p=0、q=0,则这时的变换矩阵对空间点所进行的变换为
    image

    image

    由上式,当 Z=0时,X=x,Y=y,说明z=0这个平面是此变换中的不变动平面,即变换后,x、y值均无变化;当 z→ ac时,则 Z→l/r,表示无限远点经透视变换后对应于有限点,也就是平行Z轴的直线变换后汇交于Z轴上的一点1/r;当Z→l/r时, Z→∞说明有限远点-l/r经透视变换后又对应无限远点,原来交于轴上的一点-l/r的直线变换后平行于Z轴。当r>0时,这种变换的几何意义如图2.31所示。同理可推论,当r≠0,P≠0时,则X轴上也有一个有限点x=l/P对应于x=∞的点。这时,经透视变图2.31透视交换的几何意义换后,平行于Z轴的直线汇交于Z轴上的一点1/r,而平行于X轴的直线则汇交于X轴上的点1/p处。当透视参数p、q、r都不等于零时,则透视变换将。x=∞, y=∞, z=∞处的点分别映射成 X= l/P, Y=l/q和 Z=1/r。这时,平行于三坐标轴的直线经变换后就分别汇交于X、Y、Z轴上的一固定点。

    2.3.8 三维变换应用
    1)多面视图
        在工程制图中,绘制立体多面视图时是用正投影方法将立体投影到投影面上,然后将多个投影面连同已得到的投影图按一定规则展平在同一平面上,从而得到立体的多面视图。这个投影过程如果用矩阵来表示的话,就是将立体向投影面作正投影,再将投影面绕相应的坐标轴旋转,并使图形沿投影轴平移以保持视图间一定的距离,这三个步骤可分别用矩阵表示,而将这三个矩阵级联起来就得到了最后结果。为推导三视图的变换矩阵,现以X—Y平面作为正面投影面(即V面),主视图就是画在这个投影面上的。
    (1)主视图:当立体向XY平面作正投影,在投影面展开时,XY平面保持不动,因而,x,y坐标不变,而z坐标为零,所以,主视图的变换矩阵是
    image
    (2)俯视图:俯视图是向XZ平面(即H面)投影,然后XZ平面连同所得的投影绕X轴正转出Y角,使与X Y平面重合,并沿Y轴反向平移一段距离所得的视图。这时,x,y坐标不变,Y=0。因此,俯视图的变换矩阵是
    image
    (3)侧视图:侧视图是先向Y z平面(即W面)投影,从而使y、z坐标不变,X=0,再绕Y轴正转90角,与XY平面重合,并沿X轴平移所得的视图,因此俯视图的变换矩阵是
    image
    立体的三视图也可以这样得到,即将立体向XY平面投影而得到主视图。为也得到俯视图,可把立体先绕X轴正转90度,然后向XY面投影,再沿X轴平移,就得到了侧视图。这种变换与上述变换结果是一样的。


    希望多数人能看到如何引进齐次坐标的,多数文章均没有说明原因,只是让你接受而已,这是非常关键的一点

  • 相关阅读:
    .NET内存管理、垃圾回收
    C#容器类,性能介绍
    与LINQ有关的语言特性
    IMEI
    IMSI
    无源码调试smali
    IDA远程调试 在内存中dump Dex文件
    error C4996: 'scanf': This function or variable may be unsafe.
    vue 用axios实现调用接口下载excel
    读《JavaScript权威指南》笔记(三)--对象
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1853566.html
Copyright © 2011-2022 走看看