计算一条3d空间直线和一个3d空间平面的交点

原理请见前一篇文章:

http://www.cnblogs.com/vilyLei/articles/2191514.html 

这里给出的所有算法都不依赖于语言,而是基于几何原理的。

基于as3的实现代码如下 :

//
/*
*
            计算一条3d空间直线和一个3d空间平面的交点
            @param            pnv        空间平面的法线的单位矢量
            @param            pd        空间平面的参数距离,平面的方程为: pnv.dot( pv ) = pd
            @param            ltv        空间直线的方向(切向)单位矢量
            @param            lv        空间直线上的一点
            @param            outV    计算后得到的位于平面上的交点坐标
            
        
*/
        public function planeAndSLIntersectionV(pnv:Vector3D,pd:Number,ltv:Vector3D,lv:Vector3D,outV:Vector3D):void{
            var dis:Number = pnv.dotProduct( lv ) - pd;
            //
            outV.x = ltv.x * 1000 + lv.x;
            outV.y = ltv.y * 1000 + lv.y;
            outV.z = ltv.z * 1000 + lv.z;
            
            var td:Number = pnv.dotProduct( outV ) - pd;
            
            var k:Number = dis / (dis - td);
            
            outV.x -= lv.x;
            outV.y -= lv.y;
            outV.z -= lv.z;
            
            outV.x *= k;
            outV.y *= k;
            outV.z *= k;
            
            outV.x += lv.x;
            outV.y += lv.y;
            outV.z += lv.z;
        }

////

posted @ 2011-09-29 10:10  vily_雷  阅读(8549)  评论(0)    收藏  举报