如何判断一条线是否穿过4个点的平面(2d)

How to determine if a line passes through a plane of 4 points (2d)

我目前正在尝试编写一个程序来确定一条线是否穿过 4 点正方形的区域,并且我正在寻找一个公式。我只找到了带有向量的 3 维平面的解决方案,并试图通过用笔和纸计算将它们应用到我的情况,但当需要第三个值时,我似乎总是陷入死胡同。

我认为最好的方法是计算直线到正方形的距离。如果它显然通过(它的一部分),那将是 0。但我似乎找不到 google 和堆栈溢出搜索的正确词,因为这似乎太基础了,以前没有人回答过。

如果有人有 link 或关于如何计算的建议,我将非常感激。

对于我的公式测试,我一直在使用这些简单的值:

行:
l = (0 , 0) + s * (10, 10)

广场的要点:
A (5, 5)
B (6, 5)
C (6, 6)
D (5, 6)

编辑: 使用我标记为答案的回复功能,我让它开始工作。我遇到的一个问题是获取函数的正确输入。变量 a、b 和 c。这就是我最终得到它们的方式:

var a = 1 / x2
var b = -(1 / y2)
var c = y1/y2 - x1/x2

这里有一个关于如何解决这个问题的想法。

首先,通过正方形的直线在坐标系中是什么意思?
直线 L 穿过正方形 ABCD 当且仅当 L 将 ABCD 上的对角线分开 (A&C或 B&D)。现在问题简化为检查两个给定点是否由给定线分隔。

设直线L的方程为ax + by + c = 0。定义一个函数f(x,y) = ax + by + c。如果 f(x1,y1) 和 f(x2,y2) 符号相反,则点 A=(x1,y1) 和 C=(x2,y2) 由线 L 分隔。此外,如果它们具有相同的符号,则表示点位于直线的同一侧。

这是上述想法的 Python 代码:

# Function to check if two points
# lie on the opposite side of the line

def pointsAreOnOppositeSideOfLine(a, b, c, x1, y1, x2, y2):
    fx1 = 0 # Variable to store a * x1 + b * y1 - c
    fx2 = 0 # Variable to store a * x2 + b * y2 - c


    fx1 = a * x1 + b * y1 - c
    fx2 = a * x2 + b * y2 - c

    # If fx1 and fx2 have same sign
    if ((fx1 * fx2) <= 0):
       return True

    return False