Перейти до основного вмісту

Пошук рівняння прямої для відрізка

Задача така: за заданими координатами кінців відрізка побудувати пряму, що проходить через нього.

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

Двовимірний випадок

Нехай заданий відрізок PQPQ, тобто відомі координати його кінців Px,Py,Qx,QyP_x , P_y , Q_x , Q_y.

Потрібно побудувати рівняння прямої на площині, що проходить через цей відрізок, тобто знайти коефіцієнти A,B,CA , B , C у рівнянні прямої:

Ax+By+C=0.A x + B y + C = 0.

Зауважимо, що для шуканих трійок (A,B,C)(A, B, C) існує нескінченно багато розв'язків, які описують заданий відрізок: можна помножити всі три коефіцієнти на довільне ненульове число й отримати ту саму пряму. Тому наша задача — знайти одну з цих трійок.

Легко перевірити (підставивши ці вирази та координати точок PP і QQ у рівняння прямої), що підходить такий набір коефіцієнтів:

A=PyQy,B=QxPx,C=APxBPy.\begin{align} A &= P_y - Q_y, \\ B &= Q_x - P_x, \\ C &= - A P_x - B P_y. \end{align}

Цілочисловий випадок

Важлива перевага цього способу побудови прямої полягає в тому, що якщо координати кінців були цілими, то й отримані коефіцієнти теж будуть цілими. У деяких випадках це дозволяє виконувати геометричні операції, взагалі не вдаючись до дійсних чисел.

Утім, є невеликий недолік: для однієї й тієї самої прямої можна отримати різні трійки коефіцієнтів. Щоб цього уникнути, але не відходити від цілих коефіцієнтів, можна застосувати такий прийом, який часто називають нормуванням. Знаходимо найбільший спільний дільник чисел A,B,C| A | , | B | , | C |, ділимо всі три коефіцієнти на нього, а потім робимо нормалізацію знака: якщо A<0A <0 або A=0,B<0A = 0, B <0, то множимо всі три коефіцієнти на 1-1. У результаті ми дійдемо висновку, що для однакових прямих будуть отримані однакові трійки коефіцієнтів, що дозволяє легко перевіряти прямі на рівність.

Дійсний випадок

Працюючи з дійсними числами, завжди слід пам'ятати про похибки.

Коефіцієнти AA і BB будуть порядку вихідних координат, а коефіцієнт CC — порядку їхнього квадрата. Це вже можуть бути доволі великі числа, і, наприклад, коли ми перетинаємо прямі, вони стануть ще більшими, що може призвести до великих похибок округлення вже тоді, коли координати кінцевих точок мають порядок 10310^3.

Тому, працюючи з дійсними числами, бажано виконувати так звану нормалізацію, і це робиться прямолінійно: а саме, зробити коефіцієнти такими, щоб A2+B2=1A ^ 2 + B ^ 2 = 1. Для цього обчислюємо число ZZ:

Z=A2+B2,Z = \sqrt{A ^ 2 + B ^ 2},

і ділимо на нього всі три коефіцієнти A,B,CA , B , C.

Таким чином, порядок коефіцієнтів AA і BB не залежатиме від порядку вхідних координат, а коефіцієнт CC буде того ж порядку, що й вхідні координати. На практиці це призводить до суттєвого підвищення точності обчислень.

Нарешті, згадаємо про порівняння прямих — насправді після такої нормалізації для однієї й тієї самої прямої можна отримати лише дві трійки коефіцієнтів: з точністю до множення на 1-1. Відповідно, якщо ми зробимо додаткову нормалізацію з урахуванням знака (якщо A<εA < -\varepsilon або A<ε| A | < \varepsilon, B<εB <- \varepsilon, то множимо на 1-1), то отримані коефіцієнти будуть єдиними.

Тривимірний і багатовимірний випадок

Уже у тривимірному випадку немає простого рівняння, що описує пряму (її можна задати як перетин двох площин, тобто системою двох рівнянь, але це незручний спосіб).

Отже, у тривимірному та багатовимірному випадках ми мусимо використовувати параметричний спосіб задання прямої, тобто через точку pp і вектор vv:

p+vt,   tR.p + v t, ~~~ t \in \mathbb{R}.

Тобто пряма — це всі точки, які можна отримати з точки pp, додаючи вектор vv з довільним коефіцієнтом.

Побудова прямої у параметричному вигляді за координатами кінців відрізка тривіальна: ми просто беремо один кінець відрізка за точку pp, а вектор від першого кінця до другого — за вектор vv.