我目前正试图写一个程序来确定一条线是否穿过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)上对角分开。现在问题简化为检查两个给定的点是否被一条给定的直线隔开。
下面是实现上述想法的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