异面直线求取投影交点

步骤如下:

1.根据给定的两条线段确定平面(该平面均平行于该两条异面直线)

2.求取投影点,在给定的平面内,求取交点

3.获取投影点对应曲线上的点

构造平面的方法:

利用平面标准方程,来构造平面A*x + B*y + C*z +D = 0;

 

<pre name="code" class="csharp">    class MyPlane
    {
        /// <summary>
        /// 构造平面
        /// </summary>
        public MyPlane(double A, double B, double C, double D)
        {
            _A = A;
            _B = B;
            _C = C;
            _D = D;
        }
        /// <summary>
        /// 求取点到平面的距离
        /// </summary>
        public double getDis(XYZ pt)
        {
            return (_A * pt.X + _B * pt.Y + _C * pt.Z + _D) / (Math.Sqrt(_A * _A + _B * _B + _C * _C));
        }
        /// <summary>
        /// 求取点到面的投影点
        /// </summary>
        public XYZ getPtPjt(XYZ pt)
        {
            double k = -1 * getDis(pt) / Math.Sqrt(_A * _A + _B * _B + _C * _C);
            double x = pt.X + k * _A;
            double y = pt.Y + k * _B;
            double z = pt.Z + k * _C;
            return new XYZ(x, y, z);
        }
        private double _A;
        private double _B;
        private double _C;
        private double _D;
    };

 

 

 

 

 


 

根据两条线段,构造平面:

 

 

            XYZ pt1 = left.Start;
            XYZ pt2 = left.End;

            XYZ pt3 = right.Start;
            XYZ pt4 = right.End;

            XYZ vecX = (pt2 - pt1).Normalize();
            XYZ vecY = (pt4 - pt3).Normalize();

            XYZ cross = vecX.CrossProduct(vecY);

            // 以第二条直线为准

            double A = cross.X;
            double B = cross.Y;
            double C = cross.Z;
            double D = -cross.X * pt3.X - cross.Y * pt3.Y - cross.Z * pt3.Z;

            MyPlane plane = new MyPlane(A,B,C,D);

 

 



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值