如何判断一条线是否经过一个四点平面(2d)



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

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

如果有人有关于如何计算这个的链接或建议,我将非常感谢。

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

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

正方形的点:
(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

这里有一个关于如何处理这个问题的想法。

首先,直线穿过正方形在坐标系中意味着什么?<<br/>行strong> 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

最新更新