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

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

Похожие вопросы