Example #1
0
        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);
        }
Example #2
0
        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)));
        }
Example #3
0
        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);
        }
Example #4
0
        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));
        }