Как определить лежит ли точка на прямой

Урок из серии «Геометрические алгоритмы»

Здравствуйте, дорогой читатель!

Сегодня мы рассмотрим еще одну типовую задачу из серии геометрические алгоритмы. Напишем функцию, которая будет проверять принадлежность произвольной точки отрезку, заданному координатами своего начала и конца.

Для реализации операций сравнения над вещественными данными напишем еще две функции: функцию EqPoint(), которая ,будет проверять, совпадают ли две точки на плоскости и функцию RealMoreEq() , которую будем использовать для проверки отношения «>=» (больше или равно). Причина ввода специальных функций нам уже известна.

Задача. Проверить, принадлежит ли точка отрезку.

Пусть точки — начальная и конечные точки отрезка. — произвольная точка на плоскости.

Вектор с началом в точке и концом в точке будет иметь координаты (x2-x1, y2-y1).

Если P(x, y) – произвольная точка, то координаты вектора равны: (x-x1, y – y1).

Точка Р будет принадлежать отрезку если:

  1. Векторы в и коллинеарны (равно нулю их векторное произведение):
    , т.е. (x-x1)(y2-y1)-(y-y1)(x2-x1) = 0
  2. Абсцисса точки P удовлетворяет условию: или . Иначе точка будет находиться на прямой левее или правее отрезка.

Результаты выполнения программы.

Введите координаты точек: x1, y1, x2, y2, x,y
0.5 1 2.5 2.8 1.203 1.633
Да.

Результаты тестирования в программе GeoGebra:


Сегодня мы написали функцию AtOtres() , которая проверяет принадлежность произвольной точки отрезку, заданному своими координатами.

Ввели еще две функции: EqPoint() и RealMoreEq() для реализации операций сравнения над вещественными данными. Первая проверяет, совпадают ли две точки на плоскости, вторая — используется для проверки отношения «>=».

На следующем уроке, на основе ранее написанных процедур, напишем процедуру определения координат точки пересечения двух отрезков.

На этом я с вами прощаюсь. До встречи на следующем уроке.

Читайте также:  App monitor plugin что это

Ответ

Проверено экспертом

Точка лежит на прямой, если её координаты удовлетворяют уравнению прямой, т.е. при их подстановке вместо неизвестных (х и у) получается верное числовое равенство.

а(-5;3)
-5-4*3+7=0 ?
-5-12+7≠0
-10≠0 => точка А не принадлежит прямой

в(9;4)
9-4*4+7=0 ?
9-16+7=0
0=0 => В лежит на прямой, заданной уравнением х-4у+7=0

Как в canvas определить лежит ли точка на прямой. Уточню — прямая толстая, то есть по сути это наклонный прямоугольник.

Пробовал по формуле взятой из этого вопроса и с небольшой погрешностью.

В случае с наклонными линиями все работает. Но если линия горизонтальная или вертикальная, то вычисление по данной формуле равно Infinity . А если прямых несколько, то соответственно не определить, на которой из них располагается точка

Подскажите пожалуйста алгоритм.

1 ответ 1

Проще всего воспользоваться псевдоскалярным произведением.

Если линия задана двумя точками A(x1, y1) и B(x2, y2) , и третья точка C(x, y) , то надо подсчитать величину

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

Работает, очевидно, вне зависимости от вертикальности/горизонтальности прямых.

Вы можете вычислять расстояние от точки C до прямой AB , поделив на длину отрезка AB . Величины dx1 , dy1 и |AB| = Math.Sqrt(dx1 * dx1 + dy1 * dy1) можно подсчитать заранее.

Если ваша прямая имеет заданную толщину d , можно сравнивать с ней:

Оцените статью
Добавить комментарий