php - 给定两个点,找出第三个点是在形成线的上方还是下方
问题描述
我已经使用 google cloud vision api 来识别带有表格的文档,但有时图像会有点旋转,我试图使用boundingPoly
我想要的键来获取值,但是如果它没有打开,我该如何获取它一样'y'
。
我正在考虑在上方和下方制作一条“线”,并boundingBox
确定该点是否介于两者之间,但我不知道该怎么做。
[18] => Array
(
[description] => Date
[boundingPoly] => Array
(
[vertices] => Array
(
[0] => Array
(
[x] => 698
[y] => 289
)
[1] => Array
(
[x] => 729
[y] => 289
)
[2] => Array
(
[x] => 729
[y] => 301
)
[3] => Array
(
[x] => 698
[y] => 301
)
)
)
)
[66] => Array
(
[description] => 25/03/2019
[boundingPoly] => Array
(
[vertices] => Array
(
[0] => Array
(
[x] => 1007
[y] => 290
)
[1] => Array
(
[x] => 1131
[y] => 290
)
[2] => Array
(
[x] => 1131
[y] => 307
)
[3] => Array
(
[x] => 1007
[y] => 307
)
)
)
)
解决方案
给定点(x1, y1)
和(x2, y2)
,您可以确定第三个点(x3, y3)
是否共线,如下所示。
首先,计算斜率m1 = (y2 - y1) / (x2 - x1)
。
接下来,计算斜率m2 = (y3 - y2) / (x3 - x2)
。
当且仅当 时,这些线是共线的m1 = m2
。共线意味着它们位于同一条线上。
这仅对垂直线失败;这些情况可以分别处理如下:x1 = x2 = x3
,那么这些点是共线的;if x1 = x2
or x2 = x3
but not x1 = x2 = x3
,则第三点与前两点不共线。
给定线(m1, h1)
和(m2, h2)
,您可以确定一个点(x3, y3)
是否在这些线“之间”,如下所示。
计算y1 = h1 + m1 * x3
和y2 = h2 + m2 * x3
。那么,当且仅当或
时,该点位于线之间。
2. 如果两条线都是垂直线和,那么当且仅当或时,点在线之间。
如果恰好有一条线是垂直的(假设它是第一条以便于记号),则计算;那么当且仅当或者或者时,该点在两行之间。y1 <= y3 <= y2
y2 <= y3 <= y1
x = x1
x = x2
x1 <= x3 <= x2
x2 <= x3 <= x1
x2 = (y3 - h2) / m2
x1 <= x3 <= x2
x2 <= x3 <= x1
(如果你的一条线是垂直的,另一条是水平的,我猜它们之间的唯一点就是它们的交点)。