Source code for fuzzy_set.intersection
# © 2025 Nokia
# Licensed under the BSD 3-Clause License
# SPDX-License-Identifier: BSD-3-Clause
"""
This module provides utilities to compute the intersection
of two lines.
"""
[docs]
def find_intersection(
p1: tuple[float, float],
p2: tuple[float, float],
p3: tuple[float, float],
p4: tuple[float, float]
) -> tuple[float, float] | None:
"""
Computes the intersection of two lines :math:`D`
and :math:`D'` such that:
- :math:`D` traverses the points :math:`P_1(x_1, y_1)`
and :math:`P_2(x_2, y_2)` where :math:`x_1 \\ne x_2``;
- :math:`D'` traverses the points :math:`P_3(x_3, y_3)`
and :math:`P_4(x_4, y_4)` where :math:`x_3 \\ne x_4``;
Args:
p1 (tuple[float, float]): The point :math:`P_1`.
p2 (tuple[float, float]): The point :math:`P_2`.
p3 (tuple[float, float]): The point :math:`P_3`.
p4 (tuple[float, float]): The point :math:`P_4`.
Returns:
The intersection point of :math:`D`
and :math:`D'` if uniquely defined,
``None`` otherwise.
"""
x1, y1 = p1
x2, y2 = p2
x3, y3 = p3
x4, y4 = p4
d = ((x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4))
if d == 0:
return None
a = (x1 * y2 - y1 * x2)
b = (x3 * y4 - y3 * x4)
px = (a * (x3 - x4) - b * (x1 - x2)) / d
py = (a * (y3 - y4) - b * (y1 - y2)) / d
return (px, py)