3D数学公式

来源:互联网 发布:哪个理财软件好 编辑:程序博客网 时间:2024/05/21 10:28

    众所周知,数学中向量、矩阵(变换)、齐次坐标以及四元数的概念和规则是3D游戏编程和计算机图形学的理论基础。下面介绍开发过程中经常用到的一些数学公式。

  •  直线公式

      P(t) = (1-t)P1 + tP2 

    其中,P1和P2表示3D空间的两点向量。t可以是任意实数。P1与P2之间的线段对应于t在0到1之间的值。

  •  点到直线的距离公式
 给定一个点Q,给定的直线由端点P0和方向向量V定义,在计算Q到直线的距离d时,可以通过计算Q-P0相对于直线的垂直分量而得到。如下图:
         

  •  射线公式

    P(t) = P0 + tu

    其中,t的值大于等于0,u表示射线方向向量。实际上,让t为任意实数,就得到三维空间直线。


  •   平面公式

    对应给定的3D点P0和法向量N,那么过P0且与N垂直可以唯一确定一个平面。


    N.(P - P0) = 0

    平面方程通常也可以表示为:

    Ax + By + Cz + d = 0

    其中,A,B,C是法向量N的x,y,z分量,即:

     N.P+d = 0

    法向量经常被规格化单位长度,因为这样等式

    D = N.P +d

    就可以表示平面到任意点P的带符号距离。如果D=0,则表示点P在平面上。如果d>0,则称点P在平面的正侧,因为此时P位于法向量所指的一侧。与些相反,如果d<0,那么P位于平面的负侧。

  • 直线与平面相交公式

  确定直线与平面的交点,是3D引擎中的一种常用计算。特别是在计算多边形裁剪的过程中会大量地用到直线与平面的求交。

        设P(t)=Q+tV表示包含点Q并沿V方向延伸的直线。对于法向量为N并且距原点带符号距离为D的平面,可以通过解方程来确定直线与平面的交点。

        N.P(t) + D = 0 //平面公式

        推导过程就不写了,结果为

         

        把t的值代回直线方程P(t)=Q+tV,就可以求得直线与平面的交点。如果N.V为0,那么直线与平面平行(平面法向量与直线方向向量V垂直)。这种情况下,如果N.Q+D=0,那么直线在平面上;否则,直线与平面没有交点。

  • 三个平面相交公式
空间中的区域经常用由一组平面所围成的凸多边形边界来定义。凸多边形的顶点和棱,可以通过一系列计算得到,在计算过程需要求解一些点,有多组的三个平面在这些点相交。
        设L1=<N1,D1> , L2=<N2,D2>  ,L3=<N3,D3>分别表示三个平面。可以通过求解方程组来得到同时位于三个平面的点Q:
           L1.Q = 0
           L2.Q = 0
           L3.Q = 0
         

   

 平面L1和平面L2的交线可以表示为P(t)=Q+tV。