@VinogradovDionis
Студент

Как составить алгоритм нахождения точек пересечения двух отрезков?

У меня лабораторная работа в среде разработке 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.
  • Вопрос задан
  • 182 просмотра
Пригласить эксперта
Ответы на вопрос 1
HemulGM
@HemulGM
Delphi Developer, сис. админ
А при чем тут Паскаль и тем более среда Лазарус? Это твой алгоритм криво работает. Здесь задачи не решают, здесь решают проблемы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы