Canguro.Commands.Model.ArcCircularCmd.Intersect C# (CSharp) Method

Intersect() public static method

public static Intersect ( System.Vector3 alphaI, System.Vector3 alphaJ, System.Vector3 betaI, System.Vector3 betaJ ) : System.Vector3
alphaI System.Vector3
alphaJ System.Vector3
betaI System.Vector3
betaJ System.Vector3
return System.Vector3
        public static Vector3 Intersect(Vector3 alphaI, Vector3 alphaJ, Vector3 betaI, Vector3 betaJ)
        {
            //LineElement l1, LineElement l2

               float numer, denom;
                float d1, d2, d3, d4, d5;
                Vector3 p13 = alphaI - betaI;
                Vector3 p21 = alphaJ - alphaI;
                Vector3 p43 = betaJ - betaI;

                d1 = p13.X * p43.X + p13.Y * p43.Y + p13.Z * p43.Z;
                d2 = p43.X * p21.X + p43.Y * p21.Y + p43.Z * p21.Z;
                d3 = p13.X * p21.X + p13.Y * p21.Y + p13.Z * p21.Z;
                d4 = p43.X * p43.X + p43.Y * p43.Y + p43.Z * p43.Z;
                d5 = p21.X * p21.X + p21.Y * p21.Y + p21.Z * p21.Z;

                denom = d5 * d4 - d2 * d2;
                if (Math.Abs(denom) < 0.0001)
                    return new Vector3(0,0,0);
                numer = d1 * d2 - d3 * d4;

                float r = numer / denom;
                float s = (d1 + d2 * r) / d4;

                //float scale = model.UnitSystem.FromInternational(1, Canguro.Model.UnitSystem.Units.Distance);
                Vector3 pa = alphaI + Vector3.Scale(p21, r);

               return pa;
        }