Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Простые алгоритмы на python'е на плоскости. Принадлежность точки прямой, точка пересечения прямых
Сегодня два простых алгоритма, которые, впрочем, могут быть использованы в более сложных, в будущих статьях. Сегодня поговорим о точках и прямых. Именно прямых, а не отрезков, так как с отрезками всё несколько сложнее, но интереснее и мы поговорим об этом в следующих статьях.
С точкой и прямой всё предельно просто. Любая прямая имеет уравнение вида
ax + by = c.
Подставляя x, можно вычислить y, ну и построить прямую на плоскости. Если же у нас есть точка с координатами (x1, y1), то нужно просто подставить эти значения в уравнения и если оно выполнится, то точка на прямой. Программа представлена ниже (рисунок 1). Вводятся в начале константы a, b, c, потом координаты точки.
Замечание
Поскольку мы работаем на множестве вещественных чисел (float), нужно быть крайне осторожным. Проверка на равенство может не давать правильного результата, если сравниваемые величины получены в результате вычисления. Поэтому проверку условия a * x + b * y == c следовало бы заменить на проверку неравенства abs(a * x + b * y - c) < d, где d некоторое малое число (точность).
Алгоритм нахождения пересечения двух прямых несколько сложнее и требуют некоторой математики. Но всё сводится вот к чему, к системе двух уравнений с двумя неизвестными
a1*x + b1*y = c1
a2*x + b2*y = c2
Вообще решение n уравнений с n неизвестными можно свести к вычислению определителей. Любой квадратной матрице можно однозначно поставить в соответствие число - определитель. Для двумерной матрицы вычислять определитель просто (см. ниже), а далее сложность всё увеличивается и увеличивается. Нам пока это не нужно, а двумерной матрицы
a b
c d
определитель вычисляется a * d - c * b, все просто.
Для вычисления корней уравнений, описывающих прямые на плоскости, нам будут нужны три матрицы
a1 b1
a2 b2
обозначим определитель как dd,
c1 b1
c2 b2
обозначим определитель как dx,
a1 c1
a2 c2
обозначим определитель как dy.
Тогда для точки пересечения
x = dx/dd
y = dy/dd
Но здесь важные частные случаи. Если dd=0, а хотя бы один двух других определителей нулю не равен, мы имеем отсутствие пересечения. Прямые просто параллельны. Если же равны нулю все определители, мы получим, что две прямые просто совпадают.
Ниже представлена программа, которая выдаёт либо координаты точки пересечения, либо сообщение о частном случае. При запуске программы вводятся в начале коэффициенты первого уравнения, потом второго.
Например
2 1 2
2 2 3
Результат
0.5 1.0
Пока всё!
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.