Учитывая две точки, найдите, находится ли третья точка выше или ниже сформированной линии. - PullRequest
1 голос
/ 09 апреля 2019

Я использовал API облачного видения Google, чтобы распознать документ с таблицей, но иногда изображение будет немного поворачиваться, и я попытаюсь получить значение, используя 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
      )
    )
  )
)

1 Ответ

2 голосов
/ 09 апреля 2019

Для заданных точек (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) находится "между" этими линиями следующим образом.
Вычисляет 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.

(Если одна из ваших линий вертикальная, а другая горизонтальная, я думаю, единственной точкой между ними является ихточка пересечения).

...