public static clsPoint3d ProjectPoint(clsPoint3d p1, clsLine3d l1) { double d1 = 0; clsLine3d l2 = new clsLine3d(); clsLine3d l3 = new clsLine3d(); l2 = l1.Copy(); l2.Normalise(); l3 = new clsLine3d(l1.P1, p1); d1 = l2.Dot(l3); l2.Length = d1; return(l2.P2); }
public static double Dist3d(clsPoint3d p1, clsLine3d l1) { double d1 = 0; double d2 = 0; clsLine3d l2 = new clsLine3d(); clsLine3d l3 = new clsLine3d(); l2 = l1.Copy(); l2.Normalise(); l3 = new clsLine3d(l1.P1, p1); d1 = l2.Dot(l3); d2 = l3.Length; return(Sqrt(Pow(d2, 2) - Pow(d1, 2))); }
public bool Overlaps(clsLine3d aLine, double aTol = 0) { clsLine3d l1 = default(clsLine3d); clsPoint3d p3 = default(clsPoint3d); clsPoint3d p4 = default(clsPoint3d); if (aTol == 0) { aTol = mdlGeometry.myTol; } l1 = aLine.Copy(); if ((!IsOnLine(l1.P1)) | (!IsOnLine(l1.P2))) { return(false); } if (Dot(l1) < 0) { l1.Reverse(); } p3 = l1.P1; p4 = l1.P2; if (P1 == p3) { return(true); } if (P1 == p4 | P2 == p3) { return(false); } if (IsOnShortLine(p4)) { return(true); } if (l1.IsOnShortLine(P1, aTol) | l1.IsOnShortLine(P2, aTol)) { return(true); } return(false); }
public clsPoint3d Intersect(clsLine3d l1) { //Both infinite. More accurate that IntersectQuick double l = 0; clsLine3d l2 = default(clsLine3d); clsLine3d l3 = default(clsLine3d); if (Length < mdlGeometry.myTol | l1.Length < mdlGeometry.myTol) { return(null); } l2 = Copy(); l3 = l1.Copy(); l2.Length = 1000; l3.Length = 1000; if (Abs(((l2.X2 - l2.X1) * (l3.Y1 - l3.Y2) + (l2.Y2 - l2.Y1) * (l3.X2 - l3.X1))) < mdlGeometry.myTol / 10) { return(null); } //No intersection l = ((l3.X2 - l2.X1) * (l3.Y1 - l3.Y2) + (l3.Y2 - l2.Y1) * (l3.X2 - l3.X1)) / ((l2.X2 - l2.X1) * (l3.Y1 - l3.Y2) + (l2.Y2 - l2.Y1) * (l3.X2 - l3.X1)); return(new clsPoint3d(l2.X1 + l * (l2.X2 - l2.X1), l2.Y1 + l * (l2.Y2 - l2.Y1), 0)); }