graphics.h Провести прямую через две точки

Есть аксиома, гласящая, что через любые две точки можно провести прямую и при том только одну. Если не всем, то почти всем посетителям этой страницы знакомая. Только вот аксиома умалчивает, что если две точки имеют одни и те же координаты, то это уже не одну прямую провести можно, что есть такой вырожденный случай; хотя для нас, если мы будем писать программу построения прямой по двум точкам, он имеет значение. Нам нужно, чтобы точки не совпадали по координатам.
Если кто-то не особо сведующий услышит задачу построить прямую по двум точкам, то с большой вероятностью подумает, что это нужно использовать функцию проведения линии и дело сделано, но не тут то было. По определению прямая такая неискривляемая линия, которая не имеет ни начала, ни конца. Две соединяемые точки на ней — это отрезок. Название line может кем-нибудь неверно восприниматься: функции с таким или подобными именами чертят линию, но по факту отрезок, а у отрезка есть и начало и конец. В связи с техническими ограничениями мы никак не сможем нарисовать чистую прямую линию, но можем нарисовать нечто очень близкое к ней, используя переполнение (если в цикле переменная с начальным значением ноль будет вечно увеличиваться, то при максимально доступном значении произойдёт переполнение, и вместо того, чтобы увеличиться в очередной раз, число уменьшится до максимально маленького доступного значения, буквально свалится на самое дно отсчёта и будет оттуда наращиваться). Это можно использовать, но это неэффективно по двум причинам: компьтерное рисование само по себе долгое, а тут ещё и длиннющая линия на никогда не используемые области экрана в потенциале (может, драйвера это как-то учитывают, я не знаю, но потенциал такой совсем не хорош). Поэтому для нас лучший выход рисовать отрезок по видимой или по доступной для использования области от начала левой границы области до правой границы.
Любые графики задаются формулами, и у графика прямой есть формула: AX + BY + C = 0. Поскольку наша задача предполагает, что у нас есть только две точки, нам нужно знать уравнение проходящей через две точки прямой. Таких уравнений есть несколько штук. Сначала я покажу пример по так называемому каноническому.

Перед тем, как начинать рисовать прямую, имеет смысл ознакомиться одной из базовых тем по этой части: Рисование графика функции. Кроме того, следует иметь некоторые знания алгебры, ведь мы будем иметь дело с уравнением. Нам нужно привести уравнение к такому виду, чтоб вычисляемое значение стояло по одну сторону от знака равенства, а подставляемое по другую. На всякий случай я перепишу уравнение в текстовый вид (мало ли ссылка на картинку побьётся или картинка изменится).
Каноническое уравнение прямой на плоскости:

  • (y — y2) / (y1 — y2) == (x — x2) / (x1 — x2)

Здесь y — это вычисляемое значение, x — подставляемое значение для вычисления, а x1, y1 и x2, x2 координаты заданных точек. Вы можете взять лист бумаги, ручку и попробовать разложить уравнение так, чтоб y остался в левой части, а всё остальное перешло вправую. Именно этот результат мы и будем использовать для рисования прямой.

Если вы всё сделали верно, то должны были получить такой результат:
y = ((x — x2) * (y1 — y2)) / (x1 — x2) + y2. После этого нам только и нужно подставлять значения в x, чтобы получать результат: эти x и y — это координаты на экране. Надеюсь, что кто-то из моих читателей всё-таки не поленился, разложил уравнение, вспомнил дроби. Для ленивых или у кого не получается, но любознательных:

  1. (y — y2) / (y1 — y2) == (x — x2) / (x1 — x2)
  2. y — y2 = ((x — x2) / (x1 — x2)) * (y1 — y2)
  3. y = ((x — x2) / (x1 — x2)) * (y1 — y2) + y2
Теперь можно написать программу:

Ах да, нужно же учесть, что координаты точек совпадают. Я добавлю ввод значений клавиатурой и проверку.

Иной способ нарисовать прямую — использовать другие уравнения. Например, можно взять уравнение y = kx + b. Здесь некоторые проблемы может доставить k (угловой коэффициент): ведь у нас есть только две точки и нет видных данных для коэффициента; но хорошо знающие математику смогут его вывести своими силами. Я не смогу расписать вычисления, дающие его, потому что плох в математике. Могу только дать знать, что угловой коэффициент для прямой на плоскости расчитывается по формуле k = (y2 — y1) / (x2 — x1). Вообще, если будете работать с графикой, то расчёты таких вещей нужно будет уметь делать, ведь не на всё ответы можно найти в гугле. Но когда как просчитывать k известно, становится известно всё, чтоб можно было рисовать:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/d-m-zlatopolskiy/programmirovanie-tipovye-zadachi-algoritmy-metody-6509134/?lfrom=15589587
Яндекс.Метрика