/// Checks if two lines intersect. If `bounded` is set to `true` (default) the finite length of the lines is used, otherwise the infinite length of the lines is used.
/// </summary>
/// <param name="line1">First `Line2D`</param>
/// <param name="line2">Second `Line2D`</param>
/// <param name="bounded">`true` to use finite length of lines, `false` to use infinite length of lines</param>
/// <returns>`true` if the lines intersect, `false` if they do not</returns>
/// Checks if two lines defined by their start and end points intersect. If `bounded` is set to `true` (default) the finite length of the lines is used, otherwise the infinite length of the lines is used.
/// </summary>
/// <param name="a1">First point of first line</param>
/// <param name="a2">Second point of first line</param>
/// <param name="b1">First point of second line</param>
/// <param name="b2">Second point of second line</param>
/// <param name="bounded">`true` (default) to use finite length of lines, `false` to use infinite length of lines</param>
/// <returns>`true` if the lines intersect, `false` if they do not</returns>
/// Returns the intersection point of two lines as `Vector2D`. If the lines do not intersect the `x` and `y` properties of the `Vector2D` are `NaN`. If `bounded` is set to `true` (default) the finite length of the lines is used, otherwise the infinite length of the lines is used.
/// </summary>
/// <param name="a1">First point of first line</param>
/// <param name="a2">Second point of first line</param>
/// <param name="b1">First point of second line</param>
/// <param name="b2">Second point of second line</param>
/// <param name="bounded">`true` (default) to use finite length of lines, `false` to use infinite length of lines</param>
/// <returns>The intersection point as `Vector2D`</returns>
/// Returns the shortest distance from point `p` to the line defined by its start and end points. If `bounded` is set to `true` (default) the finite length of the lines is used, otherwise the infinite length of the lines is used.
/// </summary>
/// <param name="v1">First point of the line</param>
/// <param name="v2">Second point of the line</param>
/// <param name="p">Point to get the distance to</param>
/// <param name="bounded">`true` (default) to use finite length of lines, `false` to use infinite length of lines</param>
/// <returns>The shortest distance to the line</returns>
/// Returns the shortest square distance from point `p` to the line defined by its start and end points. If `bounded` is set to `true` (default) the finite length of the lines is used, otherwise the infinite length of the lines is used.
/// </summary>
/// <param name="v1">First point of the line</param>
/// <param name="v2">Second point of the line</param>
/// <param name="p">Point to get the distance to</param>
/// <param name="bounded">`true` (default) to use finite length of lines, `false` to use infinite length of lines</param>
/// <returns>The shortest square distance to the line</returns>
/// Returns the offset coordinate on the line nearest to the given point. `0.0` being on the first point, `1.0` being on the second point, and `u = 0.5` being in the middle between the points.
/// </summary>
/// <param name="v1">First point of the line</param>
/// <param name="v2">Second point of the line</param>
/// <param name="p">Point to get the nearest offset coordinate from</param>
/// <returns>The offset value relative to the first point of the line.</returns>
/// Returns the coordinates on the line, where `u` is the position between the first and second point, `u = 0.0` being on the first point, `u = 1.0` being on the second point, and `u = 0.5` being in the middle between the points.
/// </summary>
/// <param name="u">Position on the line, between 0.0 and 1.0</param>
/// <returns>Position on the line as `Vector2D`</returns>
/// Checks if the given `Line2D` intersects this line. If `bounded` is set to `true` (default) the finite length of the lines is used, otherwise the infinite length of the lines is used.
/// </summary>
/// <param name="ray">`Line2D` to check against</param>
/// <param name="bounded">`true` (default) to use finite length of lines, `false` to use infinite length of lines</param>
/// <returns>`true` if lines intersect, `false` if they do not intersect</returns>
/// Checks if the given line intersects this line. If `bounded` is set to `true` (default) the finite length of the lines is used, otherwise the infinite length of the lines is used.
/// </summary>
/// <param name="a1">First point of the line to check against</param>
/// <param name="a2">Second point of the line to check against</param>
/// <param name="bounded">`true` (default) to use finite length of lines, `false` to use infinite length of lines</param>
/// <returns>`true` if the lines intersect, `false` if they do not</returns>
/// Returns the intersection point of of the given line defined by its start and end points with this line as `Vector2D`. If the lines do not intersect the `x` and `y` properties of the `Vector2D` are `NaN`. If `bounded` is set to `true` (default) the finite length of the lines is used, otherwise the infinite length of the lines is used.
/// </summary>
/// <param name="a1">First point of first line</param>
/// <param name="a2">Second point of first line</param>
/// <param name="bounded">`true` (default) to use finite length of lines, `false` to use infinite length of lines</param>
/// <returns>The intersection point as `Vector2D`</returns>
/// Returns the intersection point of of the given line with this line as `Vector2D`. If the lines do not intersect the `x` and `y` properties of the `Vector2D` are `NaN`. If `bounded` is set to `true` (default) the finite length of the lines is used, otherwise the infinite length of the lines is used.
/// </summary>
/// <param name="ray">Other `Line2D` to get the intersection point from</param>
/// <param name="bounded">`true` (default) to use finite length of lines, `false` to use infinite length of lines</param>
/// <returns>The intersection point as `Vector2D`</returns>