给定两个点,找出第三个点是在形成的线的上方还是下方
Given two points, find if a third point is in the above or below the formed line
我使用了 google 云视觉 api 来识别带有 table 的文档,但有时图像会有点旋转,我正在尝试使用以下方法获取值我想要的密钥的 boundingPoly
,但是如果它不在同一个 'y'
.
上,我该如何获取它
我正在考虑在 boundingBox
的上方和下方制作一个 'line' 并确定该点是否介于两者之间,但我不知道该怎么做。
[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
,则点共线;如果 x1 = x2
或 x2 = x3
但不是 x1 = x2 = x3
,则第三点与前两点不共线。
给定行 (m1, h1)
和 (m2, h2)
,您可以确定点 (x3, y3)
是否是 "between" 这些行,如下所示。
计算 y1 = h1 + m1 * x3
和 y2 = h2 + m2 * x3
.
然后,当且仅当 y1 <= y3 <= y2
或 y2 <= y3 <= y1
.
时,该点位于线之间
2.如果两条线都是垂直线x = x1
和x = x2
,那么当且仅当x1 <= x3 <= x2
或x2 <= x3 <= x1
.
时点在两条线之间
如果正好有一条线是垂直的(假设它是第一条以便于标记),则计算 x2 = (y3 - h2) / m2
;那么当且仅当 x1 <= x3 <= x2
或 x2 <= x3 <= x1
.
时,该点位于线之间
(如果你的一条线是垂直的,另一条是水平的,我猜它们之间的唯一点就是它们的交点)。
我使用了 google 云视觉 api 来识别带有 table 的文档,但有时图像会有点旋转,我正在尝试使用以下方法获取值我想要的密钥的 boundingPoly
,但是如果它不在同一个 'y'
.
我正在考虑在 boundingBox
的上方和下方制作一个 'line' 并确定该点是否介于两者之间,但我不知道该怎么做。
[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
,则点共线;如果 x1 = x2
或 x2 = x3
但不是 x1 = x2 = x3
,则第三点与前两点不共线。
给定行 (m1, h1)
和 (m2, h2)
,您可以确定点 (x3, y3)
是否是 "between" 这些行,如下所示。
计算 y1 = h1 + m1 * x3
和 y2 = h2 + m2 * x3
.
然后,当且仅当 y1 <= y3 <= y2
或 y2 <= y3 <= y1
.
时,该点位于线之间
2.如果两条线都是垂直线x = x1
和x = x2
,那么当且仅当x1 <= x3 <= x2
或x2 <= x3 <= x1
.
时点在两条线之间
如果正好有一条线是垂直的(假设它是第一条以便于标记),则计算 x2 = (y3 - h2) / m2
;那么当且仅当 x1 <= x3 <= x2
或 x2 <= x3 <= x1
.
(如果你的一条线是垂直的,另一条是水平的,我猜它们之间的唯一点就是它们的交点)。