现在的位置: 首页 > 综合 > 正文

3D数学知识简介

2013年09月15日 ⁄ 综合 ⁄ 共 3867字 ⁄ 字号 评论关闭

前言(Preface)

前段时间有些朋友在论坛里问到一些关于3D数学的知识,就想为大家写点这方面的文章。由于之前比较忙,又遇到过春节,所以最近才着笔写了这篇文章,希望大家喜欢。这些内容主要是一些理论知识,看上去难免有些枯燥,之后的文章我会加入一些实例进行讲解的。如果内容存在错误和不全,就请你来更正和添加了。

 

三维坐标系(3D
Coordinate System)

三维坐标是把二维的平面坐标推广到三维空间中,在三维坐标中,点(x,y,z)的齐次坐标为(nx,ny,nz,n),其中n为任意不为0的数,规范化的齐次坐标为(x,y,z,1),与之相对应,三维变换的变换矩阵为4×4矩阵。

在三维空间中,我们通常使用右手坐标系(Right-Handed Coordinate System),因为它符合数学上的习惯,而在计算机图形学中,我们会使用左手坐标系(Left-Handed
Coordinate System),因为它比较符合日常习惯。其实,我们可以任意的旋转这些坐标系,而图形仍然保持不变。常见的坐标系如下:


本地坐标系:相对于对象的原点的3D坐标系 

世界坐标系:相对于3D世界的原点三维坐标系

对齐(视点)坐标系:世界坐标系的变换,观察者的位置在世界坐标系的原点。

屏幕坐标系:相对于显示器的原点的2D坐标系

 

点(Point)

点是在某一个坐标系中使用坐标值指定的位置。因此,点到坐标原点之间的距离与坐标系的选择有关。点P在坐标系A中的坐标为(0,0,0),而在坐标系B中的坐标则为(x,y,z)。

 

向量(Vector)

向量是指两点的差值,具有大小和方向,即给定两点,就能唯一确定一个向量,向量的大小和方向与坐标系的选择无关。向量V=(Vx,Vy,Vz)=P1P2=(x2-x1,y2-y1,z2-z1)其中,Vx,Vy和Vz分别为向量V在x,y和z轴上的投影,称为向量V的x分量(x
component),y分量(y component)和z分量(z component)。该向量的大小为:

       向量V与x,y和z轴形成的方向角(Direction Angle):α,β和γ,其中cosα,cosβ和cosγ称为方向余弦(Direction Cosine)。

    向量加法:V1+V2=(V1x+V2x,V1y+V2y,V1z+V2z

    向量标量乘:aA=(aVx,aVy,aVz

    向量标量积:V1·V2=
V1x+V2x,V1y+V2y,V1z+V2z

        向量积(*积):V1×V2=(V1yV2z-V1zV1y,V1zV2x-V1xV2z,V1xV2y-V1yV2z

                      =|Ux 
Uy  Uz|

                                              |V1x 
V1y  V1z|

                                              |V2x 
V2y  V2z|

注:其中Ux,Uy,Uz分别表示沿x轴,y轴和z轴的单位向量。在以后的编程中,我们经常会用到向量积。

 

矩阵(Matrix)

矩阵是由若干个数值构成的矩形阵列,这些数值通常为实数,称为矩阵的元素。如果一个矩阵的行和列数相同,我们则称该矩阵为方阵(Square
Matrix)
,而只有一行或者一列的矩阵用常用向量表示,例如:[x,y,z]称为行向量(Row Vector),

|x|

|y| 则称为列向量(Colume Vector)。

|z|

 

矩阵加法:|A11 
A12  A13
  |B11  B12 
B13|       | A11+
B11  A12+
B12  A13+
B13|

                    |A21 
A22  A23|
+ |B21  B22 
B23|  =  | A21+
B21  A22+
B22  A23+
B23|

                    |A31 
A32  A33|    |B31 
B32  B33|      
| A31+ B31 
A32+ B32 
A33+ B33|

 

矩阵标量乘: |A11 
A12  A13|   
  |nA11  nA12 
nA13|

                       n |A21 
A22  A23|
=  |nA21  nA22 
nA23|

                          |A31 
A32  A33|     
|nA31  nA32 
nA33|

 

 

矩阵变换(Matrix
Transform)

三维平移的矩阵表示为:

[x`,y`,z`,1]=[x,y,z,1] | 1  0  0  0 | 

                               | 0  1  0  0 |

                               | 0 
0  1  0 |

                               | tx ty  tz 1 |

 

三维缩放的矩阵表示为:

[x`,y`,z`,1]=[x,y,z,1] | sz  0  0  0 |

                               | 0  sy  0  0 |

                               | 0 
0  sx  0 |

                               | 0  0  0  1 |

      

绕x轴旋转的矩阵表示为:

              [x`,y`,z`,1]=[x,y,z,1] | 1    0     0    0 |

                                              | 0  cosα  sinα  0 |

                                              | 0 
-sinα  cosα 0 |

                                              | 0   
0     0    1 |

      

绕y轴旋转的矩阵表示为:

              [x`,y`,z`,1]=[x,y,z,1] | cosα  0  -sinα  0 |

                                              
0     1    0    0 |

                                              | sinα   0  cosα  0 |

                                              
0     0    0    1 |

 

绕z轴旋转的矩阵表示为:

              [x`,y`,z`,1]=[x,y,z,1] | cosα  sinα  0  0 |

                                              |
-sinα  cosα  0  0 |

                                              |  
0      0    1  0 |

                                              |   0      0    0  1 |

 

反射(Reflection)

       反射变换也称为对称(Symmetric)变换或镜像(Mirror Image)变换,三维反射变换可以相对于反射轴(Reflection Axis)进行,也可以相对于反射平面进行。相对于反射轴的三维反射变换是通过将图形绕反射轴旋转180°来实现的。

       相对于xy平面的反射变换矩阵为:

              | 1  0  0  0 |

              | 0  1  0  0 |

              | 0  0  1  0 |

              | 0  0  0  1 |

 

       相对于yz平面的反射变换矩阵为:

              |-1  0  0  0 |

              | 0  1  0  0 |

              | 0  0  1  0 |

              | 0  0  0  1 |

 

       相对于zx平面的反射变换矩阵为:

              | 1  0  0  0 |

              | 0  -1  0  0 |

              | 0  0  1  0 |

              | 0  0  0  1 |

 

错切(Shear)

       错切变换会改变图形的形状。

       相对于x轴的错切变换矩阵为:

              |  1  0   0   0 |

              | shY 
1   0   0 |

              | shz 
0   1   0 |

              |  0  0   0   1 |

 

       相对于y轴的错切变换矩阵为:

              | 1  shX  0
  0 |

              | 0   1   0   0 |

              | 0  shz 
1   0 |

              | 0   0   0   1 |

 

       相对于z轴的错切变换矩阵为:

| 1  0  shX 
0 |

              | 0  1  shY 
0 |

              | 0  0   1   0 |

              | 0  0   0   1 |

 

从简单的平移、缩放和旋转等可以延伸到复合平移、复合缩放、复合旋转、固定点缩放等概念,这

抱歉!评论已关闭.