给定两个点,找出第三个点是在形成的线的上方还是下方

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 = x2x2 = x3 但不是 x1 = x2 = x3,则第三点与前两点不共线。


给定行 (m1, h1)(m2, h2),您可以确定点 (x3, y3) 是否是 "between" 这些行,如下所示。
计算 y1 = h1 + m1 * x3y2 = h2 + m2 * x3.
然后,当且仅当 y1 <= y3 <= y2y2 <= y3 <= y1.
时,该点位于线之间 2.如果两条线都是垂直线x = x1x = x2,那么当且仅当x1 <= x3 <= x2x2 <= x3 <= x1.
时点在两条线之间 如果正好有一条线是垂直的(假设它是第一条以便于标记),则计算 x2 = (y3 - h2) / m2;那么当且仅当 x1 <= x3 <= x2x2 <= x3 <= x1.

时,该点位于线之间

(如果你的一条线是垂直的,另一条是水平的,我猜它们之间的唯一点就是它们的交点)。