点到平面的垂足

点到平面的垂足:

思路:

先求解点到平面的距离---根据上面的公式

求交点

long GetPanelProjDot(Vector3 *dot0, double *pdPanelCoef, Vector3 *dot1)

{

         long           lRes = 1;

         double               linT = 0;

        

         if(pdPanelCoef==NULL) {

                   lRes = -1;

                   goto EndPro;

         }

        

         //计算直线参数方程的参数

         //点到平面的距离---有符号的距离,距离取反是因为后面投影式用+号。

距离符号说明:距离为正,说明法向量指向点,如果距离为负,说明法向量指向点所在平面的另一面。

计算距离

         linT= -(pdPanelCoef[0]*dot0->x+pdPanelCoef[1]*dot0->y+pdPanelCoef[2]*dot0->z+pdPanelCoef[3]) /

                   (pow(pdPanelCoef[0],2)+pow(pdPanelCoef[1],2)+pow(pdPanelCoef[2],2));

这里也可以用另外一个公式计算:更简便

计算投影

求投影点:用向量求投影点 dot1->x = (float)(dot0->x + pdPanelCoef[0]*linT);所以距离取反。

距离L>0,投影点为T= P–|L|*N,距离L<0,投影点为T= P+|L|*N,所以L取负,可以用“+”号,其实也可以,不用取反,然后用“-”号的。

         //根据已经推断的公式,计算投影点

         dot1->x = (float)(dot0->x + pdPanelCoef[0]*linT);

         dot1->y = (float)(dot0->y + pdPanelCoef[1]*linT);

         dot1->z = (float)(dot0->z + pdPanelCoef[2]*linT);                                                      

EndPro:

         return lRes;

}

你可能感兴趣的:(vector,null,float)