Знаходження точки перетину двох прямих заданих двома точками

Нехай маємо дві прямі задані точками свого початку та кінця (перша пряма задана точками Точка перетину двох прямих таline_intersection2 і друга – line_intersection3 та line_intersection4 відповідно), для яких необхідно визначити координати точки їх перетину. Очевидне рішення даної задачі полягає в тому, щоб вирішити систему з двох лінійних рівнянь, які описують задані прямі.

Отже, якщо задані дві точки Точка перетину двох прямих і line_intersection2, то з курсу аналітичної геометрії відомо, що рівняння прямої, яке проходить через ці точки, можна записати у наступному вигляді:

line_intersection6

Отриманий вираз слід перетворити до вигляду загального рівняння прямої: line_intersection7. Для цього, звільнимо рівняння (1) від дробів, розкриємо дужки та згрупуємо доданки при невідомих.

line_intersection12

Далі, винісши невідомі line_intersection9 та line_intersection10 за дужки, отримуємо рівняння прямої виду (2), коефіцієнти при невідомих та вільний член якого обчислюються за формулами:

line_intersection16

Після того, як рівняння прямих відомі, переходимо до визначення точки їх перетину. Для цього, як уже було сказано вище, скориставшись будь-яким з відомих чисельних методів (метод Крамера, метод Гаусса, Метод простої ітерації,…), знаходимо розв’язок системи двох лінійних рівнянь з двома невідомими, і таким чином отримуємо шукані координати точки перетину.

Провіримо працездатності розглянутого алгоритму. Для цього, використовуючи середовище програмування Delphi 7, створимо новий delphi-проекту, на головній формі якого розмістимо наступні компоненти:

Головна форма delphi-проекту "Відшукання точки перетину двох прямих"
Головна форма delphi-проекту “Відшукання точки перетину двох прямих”

Далі, після слова implementation в модулі вікна оголошуємо глобальні змінні x1, y1, x2, y2, x3, y3, x4, y4 цілого типу, які відповідатимуть за координати точок початку і кінця прями та будуть доступні з будь-якої процедури в цьому модулі. А також, напишемо код для підпрограми опрацювання події OnClick компонента Button1 (кнопка “Побудувати прямі”), який реалізує процес побудови двох прямих на канві форми Form1:

var
x1, y1, x2, y2, x3, y3, x4, y4: integer;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Задаєм значення координатів точок початку і кінця прямих
x1 := StrToInt(Edit1.Text); y1 := StrToInt(Edit2.Text);
x2 := StrToInt(Edit3.Text); y2 := StrToInt(Edit4.Text);
x3 := StrToInt(Edit5.Text); y3 := StrToInt(Edit6.Text);
x4 := StrToInt(Edit7.Text); y4 := StrToInt(Edit8.Text);
// По заданих координатах здійснюємо побудову прямих
Form1.Canvas.MoveTo(x1, y1);
Form1.Canvas.LineTo(x2, y2);
Form1.Canvas.MoveTo(x3, y3);
Form1.Canvas.LineTo(x4, y4);
end;

І на останньому кроці на подію OnCkick кнопки Button2 (“Знайти точку перетину”) запишемо код відшукання координатів та візуального представлення точки перетину заданих прямих:

procedure TForm1.Button2Click(Sender: TObject);
var
A: array[1..2, 1..2] of real;
b: array[1..2] of real;
d, d1, d2, X, Y: real;
begin
// Елементи матриці та стовпця вільних членів заповнюємо відповідними коефіцієнтами рівнянь прямих
A[1, 1] := y2 – y1; A[1, 2] := x1 – x2; b[1] := -(y1 * x2 – x1 * y2);
A[2, 1] := y4 – y3; A[2, 2] := x3 – x4; b[2] := -(y3 * x4 – x3 * y4);
// Знаходимо основний та допоміжні визначники
d := A[1, 1] * A[2, 2] – A[2, 1] * A[1, 2];
d1 := b[1] * A[2, 2] – b[2] * A[1, 2];
d2 := A[1, 1] * b[2] – A[2, 1] * b[1];
if (Abs(d) <= 0.1) then
StatusBar1.Panels[0].Text := ‘Прямі не перетинаються!’
else
begin
// Використовуючи алгоритм методу крамера знаходимо координати точки перетину прямих
X := d1 / d;
Y := d2 / d;
Form1.Canvas.Ellipse(Round(X) – 3, Round(Y) – 3, Round(X) + 3, Round(Y) + 3);
StatusBar1.Panels[0].Text := ‘Прямі перетинаються в точці з координатами (‘ + FloatToStr(X) + ‘, ‘ + FloatToStr(X) + ‘)’;
end;
end;

Отже, запустивши проект на виконання і задавши у відповідні поля координати початку та кінця примях, та сткориставшись відповіднимим кнопками отримуємо координати шуканої точки:

line_intersection14
Результат роботи delphi-проекту “Відшукання точки перетину двох прямих”

Скачати delphi-проект “Відшукання точки перетину двох прямих”.

Залишити коментар

Your email address will not be published. Required fields are marked *

*