コード例 #1
0
ファイル: Intersect2d.cs プロジェクト: ventor3000/guppy2
        static public Point2d[] LineLine(Line2d lin1, Line2d lin2)
        {
            double s, t;

            if (!LineLineParametric(lin1, lin2, out s, out t))
            {
                return(null);
            }
            return(new Point2d[] { lin1.PointAt(s) });
        }
コード例 #2
0
ファイル: Intersect2d.cs プロジェクト: ventor3000/guppy2
        static public Point2d LineLineAsPoint(Line2d lin1, Line2d lin2)
        {
            double s, t;

            if (!LineLineParametric(lin1, lin2, out s, out t))
            {
                return(null);
            }
            return(lin1.PointAt(s));
        }
コード例 #3
0
ファイル: Intersect2d.cs プロジェクト: ventor3000/guppy2
        const double seg_maxparam = 1.0;    //used as max limit for parameters beeing on a segment

        #region PRIVATE_UTILS

        /// <summary>
        /// Converts an array of line parameters to an array of points, limited
        /// by a minimum and maximum parameter. On emty result, null is returned,
        /// otherwise a list of points along the line.
        /// </summary>
        private static Point2d[] LineParamsToPoints(double[] ts, Line2d l, double mint, double maxt)
        {
            if (ts == null)
            {
                return(null);
            }
            int n = ts.Length;

            if (n <= 0)
            {
                return(null);
            }

            Point2d[] res = new Point2d[n];
            int       idx = 0;

            for (int q = 0; q < n; q++)
            {
                double t = ts[q];
                if (t >= mint && t <= maxt)
                {
                    res[idx++] = l.PointAt(ts[q]);
                }
            }

            if (idx == 0)
            {
                return(null);    //all params out of range
            }
            if (idx != n)
            {
                Array.Resize(ref res, idx);
            }

            return(res);
        }