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;
}