Найти координаты точек пересечения двух окружностей - Pascal ABC
Формулировка задачи:
Найти координаты пунктов пересечения двух окружностей радиусами и с центрами в пунктах (;) и (;) соответственно.
Решение задачи: «Найти координаты точек пересечения двух окружностей»
textual
Листинг программы
const t=0.0001;
var x1,y1,r1,x2,y2,r2:integer;
x,y,a,b,h,d,x3,y3,x4,y4:real;
begin
writeln('Введите параметры 1 окружности x,y,R');
readln(x1,y1,r1);
writeln('Введите параметры 2 окружности x,y,R');
readln(x2,y2,r2);
{x1:=-1;y1:=1;r1:=13;
x2:=5;y2:=1;r2:=12;}
d:=sqrt(sqr(x1-x2)+sqr(y1-y2));
if (d>r1+r2)or(d<abs(r1-r2)) then write('Точек пересечения нет')
else if abs(d-(r1+r2))<t then
begin
writeln('Окружности касаются в точке:');
x3:=(x1+x2)/2;
y3:=(y1+y2)/2;
writeln('x=',x3:0:2,' y=',y3:0:2);
end
else
begin
b:=(sqr(r2)-sqr(r1)+sqr(d))/(2*d);
a:=d-b;
h:=sqrt(sqr(r2)-sqr(b));
x:=x1+(x2-x1)/(d/a);
y:=y1+(y2-y1)/(d/a);
x3:=x-(y-y2)*h/b;
y3:=y+(x-x2)*h/b;
x4:=x+(y-y2)*h/b;
y4:=y-(x-x2)*h/b;
writeln('Точки пересечения:');
writeln('1:x=',x3:0:2,' y=',y3:0:2);
writeln('2:x=',x4:0:2,' y=',y4:0:2);
end;
end.
Объяснение кода листинга программы
- В начале кода объявляются переменные t, x1, y1, r1, x2, y2, r2:integer; и x, y, a, b, h, d, x3, y3, x4, y4:real.
- Затем происходит чтение параметров первой окружности из стандартного ввода и сохранение их в соответствующие переменные x1, y1, r1. Аналогично читаются параметры второй окружности и сохраняются в переменные x2, y2, r2.
- Далее вычисляется расстояние между центрами окружностей, а также проверяется, пересекаются ли они или нет. Если расстояние больше или равно сумме радиусов окружностей или меньше разности между ними, то выводится сообщение о том, что точек пересечения нет.
- Если же расстояние меньше заданной величины t, то выполняется дальнейший расчет. Для этого вычисляется среднее значение координат x и y от двух окружностей и выводится сообщение о том, что окружности касаются в точке.
- Если же расстояние больше или равно t, то вычисляются точки пересечения. Для этого вычисляются значения x3, y3, x4, y4 по формулам, которые зависят от радиусов окружностей и расстояния между ними. Выводится сообщение о том, что точки пересечения найдены.
- Код завершается без использования вложенных списков.