예제 #1
0
        private static double incidenceLineCircle(NPoint point1, NPoint point2, double radius)
        {
            double determinant = point1.CrossProduct(point2);
            double lineLength  = Algebra.SRSS((point2.X - point1.X), (point2.Y - point1.Y));

            return(incidenceLineCircle(radius, lineLength, determinant));
        }
예제 #2
0
        /// <summary>
        /// The y-coordinates of a line intersecting a circle centered at 0,0.
        /// </summary>
        /// <param name="point1">First point forming the line.</param>
        /// <param name="point2">Second point forming the line.</param>
        /// <param name="radius">Radius of the circle centered at 0,0.</param>
        public static double[] CircleLineIntersectY(NPoint point1, NPoint point2, double radius)
        {
            Offset delta       = new Offset(point1, point2);
            double determinant = point1.CrossProduct(point2);
            double lineLength  = Algebra.SRSS(delta.X(), delta.Y());
            double incidence   = incidenceLineCircle(radius, lineLength, determinant);

            return(CircleLineIntersectY(radius, lineLength, incidence, determinant, delta));
        }
예제 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="point1"></param>
        /// <param name="point2"></param>
        /// <param name="radius"></param>
        /// <returns></returns>
        public static NPoint[] CircleLineIntersect(NPoint point1, NPoint point2, double radius)
        {
            Offset delta       = new Offset(point1, point2);
            double determinant = point1.CrossProduct(point2);
            double lineLength  = Algebra.SRSS(delta.X(), delta.Y());
            double incidence   = incidenceLineCircle(radius, lineLength, determinant);

            double[] xCoords = CircleLineIntersectX(radius, lineLength, incidence, determinant, delta);
            double[] yCoords = CircleLineIntersectY(radius, lineLength, incidence, determinant, delta);

            return(new[]
            {
                new NPoint(xCoords[0], yCoords[0]),
                new NPoint(xCoords[1], yCoords[1])
            });
        }