Пример #1
0
        /// <summary>
        /// Checks if given <c>PointF</c> is contained within quadrilateral
        /// defined by <c>cornerPoints</c> provided.
        /// </summary>
        /// <param name="point"><c>PointF</c> to check.</param>
        /// <param name="cornerPoints">Array of <c>PointF</c> structures defining corners of the
        /// quadrilateral.</param>
        /// <returns>
        ///   <c>true</c> if the point is contained within the quadrilateral.
        /// </returns>
        /// <exception cref="System.ArgumentNullException">point or cornerPoints</exception>
        public static bool Contains(PointF point, PointF[] cornerPoints)
        {
            point.ThrowIfNull(nameof(point));

            cornerPoints.ThrowIfNull(nameof(cornerPoints));

            int intersections = 0;
            for (int i = 1; i < cornerPoints.Length; ++i)
            {
                if (DoesIntersect(point, cornerPoints[i], cornerPoints[i - 1]))
                    ++intersections;
            }
            if (DoesIntersect(point, cornerPoints[cornerPoints.Length - 1], cornerPoints[0]))
                ++intersections;
            return intersections % 2 != 0;
        }