/// <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; }