/// <summary> /// Gets distance of the <paramref name="point"/> from <paramref name="line"/> /// </summary> /// <param name="line">Line</param> /// <param name="point">Point</param> /// <returns>Distance</returns> public static double Distance(ref StraightLine line, ref WM.Point3D point) { Plane3D tempPln = new Plane3D(point, line.Direction); var temPlnIntersection = tempPln.GetIntersection(ref line); return((temPlnIntersection - point).Length); }
/// <summary> /// Returns the distance of <paramref name="line1"/> and <paramref name="line2"/> /// </summary> /// <param name="line1">The first line</param> /// <param name="line2">The second line</param> /// <returns>Distance</returns> public static double Distance(ref StraightLine line1, ref StraightLine line2) { var dot = Math.Abs(WM.Vector3D.DotProduct(line1.Direction, line2.Direction)); if (dot.IsEqual(1, 1e-8)) { // lines are parallel var pln = new Plane3D(line1.Point, line1.Direction); var line2Intersection = pln.GetIntersection(ref line2); return((line1.Point - line2Intersection).Length); } var cross = WM.Vector3D.CrossProduct(line1.Direction, line2.Direction); var pln2 = new Plane3D(line1.Point, cross); var dist = pln2.GetPointDistance(ref line2.Point); return(Math.Abs(dist)); }