【问题标题】:Given two points, find if a third point is in the above or below the formed line给定两个点,找出第三个点是在形成线的上方还是下方
【发布时间】:2019-04-09 18:41:42
【问题描述】:

我已经使用 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
      )
    )
  )
)

【问题讨论】:

标签: php math vector google-cloud-vision


【解决方案1】:

给定点(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) 是否在这些线“之间”,如下所示。
计算 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 时,点就在两行之间。

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

【讨论】:

  • 对不起,我试图理解第二个公式,但是(m1, h1)是什么@
  • @WeslleyRocha m1 是第一行的斜率,h1 是第一行的 y 截距。这两件事唯一地定义了任何(非垂直)线。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
相关资源
最近更新 更多