Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var a, b, ax, ay, bx, by, first_angle, angle: real;
- var i, j: integer;
- var lst: array[0..65535] of real;
- var second_point: array[0..1] of real;
- var is_equal: boolean;
- begin
- read(a, b);
- while (a<>0) or (b<>0) do begin
- lst[i] := a;
- lst[i+1] := b; // Записываем координаты точек таким образом, что каждый чётный индекс - первая координата точек, а каждая нечётная - вторая.
- read(a, b);
- i := i + 2;
- end;
- if i > 6 then begin // Иначе 100% фигура вписанная
- second_point[0] := lst[2];
- second_point[1] := lst[3]; // Берём вторую по счёту
- j := 4;
- while j < i do begin // По сути цикл for с шагом в 2.
- if (sqrt(sqr(lst[0]-lst[j])+sqr(lst[1]-lst[j+1])) < sqrt(sqr(lst[0]-second_point[0])+sqr(lst[1]-second_point[1]))) then begin
- // Если расстояние от текущей точки до первой меньше того расстояния, которое раньше считалось наименьшим, то...
- second_point[0] := lst[j]; // ... заменить наименьшее расстояние
- second_point[1] := lst[j+1];
- end;
- j := j + 2;
- end;
- ax := lst[0]-lst[2];
- ay := lst[1]-lst[3];
- bx := lst[2]-second_point[0];
- by := lst[3]-second_point[1];
- if (bx=0) and (by=0) then begin // Если вдруг second_point это та же самая точка, что и точка под номером 2,
- // то ниже будет деление на ноль, так что для первого угла, который мы будем сравнивать, возьмём третью точку.
- ax := lst[0]-lst[4];
- ay := lst[1]-lst[5];
- bx := lst[4]-second_point[0];
- by := lst[5]-second_point[1];
- end;
- a := sqrt(sqr(ax)+sqr(ay));
- b := sqrt(sqr(bx)+sqr(by));
- first_angle := (ax*bx+ay*by)/(a*b); // Сравнивать можно не углы, а сразу сами косинусы.
- first_angle := round(first_angle*1000)/1000; // Округление, так как может быть загвоздка вроде -1 != -0.9999999999999999997
- j := 2;
- is_equal := True;
- while j < i do begin // Опять цикл с шагом в 2
- if (lst[j] <> second_point[0]) or (lst[j+1] <> second_point[1]) then begin // Если точка не есть вторая точка, то...
- ax := lst[0]-lst[j]; // Проекция a на ось x
- ay := lst[1]-lst[j+1]; // Проекция a на ось y
- bx := lst[j]-second_point[0]; // Проекция b на ось x
- by := lst[j+1]-second_point[1]; // Проекция b на ось y
- a := sqrt(sqr(ax)+sqr(ay));
- b := sqrt(sqr(bx)+sqr(by));
- angle := (ax*bx+ay*by)/(a*b);
- angle := round(angle*1000)/1000;
- is_equal := is_equal and (
- angle = first_angle // Если хоть один раз это условие провалится, то is_equal будет False до конца.
- );
- end;
- j := j + 2;
- end;
- if is_equal then writeln('Лежат на одной окружности.')
- else writeln('Не лежат на одной окружности.');
- end
- else writeln('Лежат на одной окружности.');
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement