Пример #1
0
        /// <summary>
        ///求异面直线公垂线在该直线上的垂足
        /// </summary>
        public Point GetFootPointWithSkewLine(RayInfo otherRay)
        {
            SpectVector verticalVector = this.RayVector.CrossMultiplied(otherRay.RayVector);//求两条异面直线的公垂线的向量
            Face        viewFace       = new SpaceFace(this.Origin, this.RayVector.CrossMultiplied(verticalVector));
            Point       crossPoint     = otherRay.GetCrossPointBetweenStraightLineAndFace(viewFace);

            return(this.getDropFoot(crossPoint));
        }
Пример #2
0
        /// <summary>
        ///求平面外一条直线在该平面上的投影
        /// </summary>
        /// <param name="viewPoint">平面外一条直线</param>
        /// <returns>平面外一条直线在该平面上的投影</returns>
        public RayInfo GetProjectionRayInFace(RayInfo viewRay)
        {
            double dotProduct = this.normalVector.a * viewRay.RayVector.a +
                                this.normalVector.b * viewRay.RayVector.b + this.normalVector.c * viewRay.RayVector.c;

            if (Math.Abs(dotProduct) < 0.00000001)
            {
                return(new RayInfo(this.GetProjectionPointInFace(viewRay.Origin), viewRay.RayVector));
            }
            else
            {
                Point rayPointInFace = this.GetProjectionPointInFace(viewRay.Origin);
                Point crossPoint     = viewRay.GetCrossPointBetweenStraightLineAndFace(this);
                return(new RayInfo(rayPointInFace, crossPoint));
            }
        }