2012-03-09 3 views
0

Im пишу приложение, которое рассчитает фокусное расстояние камеры на основе линий, которые можно увидеть на фотографии. Например, если вы фотографируете комнату, потолочная линия может быть одной прямой (горизонтальной), пол может быть другой прямой (горизонтальной), а стена может быть третьей прямой (вертикальной). Цель моего приложения заключается в том, чтобы пользователь мог выбирать эти прямые по одному за раз, а после того, как выбрано 3 линии, линии должны быть пересечены, чтобы сформировать «треугольник».Пересечения линий

Моя проблема заключается в том, что, поскольку выбранные линии не обязательно пересекаются, как мне расширить линию до тех пор, пока она не пересенется с другой линией? В моем приложении у меня есть начальная и конечная позиции всех 3 выбранных пользователем строк (Vector2's). Но как я могу расширить каждую строку до тех пор, пока она не пересечется с другими 2 строками?

Если кому-то нужен изображение, чтобы пояснить, что я имею в виду, пришлите мне ответ и Ill загрузить один на Flickr

+0

Я бы опубликовал его в разделе «Математика» или, возможно, в Физике. –

+0

Это не всегда можно сделать. Если линии фактически параллельны, расширение не будет пересекать их. –

ответ

0

Say каждая линия представлена ​​двумя Vector2 х: v1 и v2, все точки в этой данной линии будет задается уравнением: p(x) = v1 + x(v2-v1). Каждая строка будет иметь свое уравнение в этой форме. Для каждой пары линий вам нужно будет найти значение x, которое даст вам одинаковые p (x) для обоих уравнений; p (x) будет точкой пересечения этих двух линий.

+0

Если нет значения x, которое дает вам то же p (x), то вы будете в том случае, когда упоминаются Don (параллельные строки). – Eduardo

0

Похоже, вам нужно сделать 3 вещи.

  1. Расширение линий до конца рисунка (в вашем коде, не отображается для пользователя).

  2. Рассчитать пересечение линии. Ответьте на этот ответ: detecting line intersection

  3. на конце пользователя, протяните линии до точки пересечения, если на снимке.

Смежные вопросы