У меня лабораторная работа в среде разработке Lazarus. Не получается составить алгоритм нахождения точек пересечения двух отрезков. Само задание ниже:
Даны два отрезка А и В, заданные координатами их концов (АX1,АY1),(АX2,АY2) и
(ВX1,ВY1),(ВX2,ВY2) – целыми числами. Определить, пересекаются ли они, в случае пересечения
вычислить координаты (вещественные числа) точки их пересечения.
Вот код, который получился у меня:
procedure TForm1.Button1Click(Sender: TObject);
const e=0.0001;
var x1,y1,x2,y2,x3,y3,x4,y4,x,y:real;
str1,str2:string;
begin
clrscr;
Memo1.clear();
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);
if(abs(x1-x2)<e)and(abs(x3-x4)<e)or(abs((y2-y1)*(x4-x3)-(y4-y3)*(x2-x1))<e)then
Memo1.lines.add('Отрезки параллельны')
else
begin
if(abs(x1-x2)<e)and(abs(y3-y4)<e)then
begin
x:=x1;
y:=y3;
end
else if(abs(x3-x4)<e)and(abs(y1-y2)<e)then
begin
x:=x3;
y:=y1;
end
else
begin
x:=-((x1*y2-x2*y1)*(x4-x3)-(x3*x4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
y:=((y3-y4)*(-x)-(x3*y4-x4*y3))/(x4-x3);
if((x>=x1)and(x<=x2))or((x>=x2)and(x<=x))then begin
str1:=FloatToStr(x);
str2:=FloatToStr(y);
Memo1.lines.add(str1+str2);
end
else Memo1.Lines.add('Не пересекаются');
end;
end;
end;
end.