Определить, пересекаются ли прямая и круг. - Pascal

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! на плоскости задана прямая (известны координаты двух точек ,которые принадлежат ей) и круг (известны координаты центра и радиус) Определить, пересекаются ли прямая и круг.

Решение задачи: «Определить, пересекаются ли прямая и круг.»

textual
Листинг программы
program talglab4;
var xo,yo,xa,ya,xb,yb : integer ;
a,b,c,s,hor,rez,rezult,l,kyt: real;
p,z,grad:double;
r:byte;
beta:single;
 
function ArcSin ( s : Real ): Real;
 begin
 if s = 1.0 then { to avoid division by 0 }
ArcSin := Pi / 2.0
 else
ArcSin := ArcTan ( s / Sqrt ( 1 - s * s ) );
 end;
 
begin
writeln('vveditj koordunatu centra kola xo');
readln(xo,yo);
writeln('vveditj koordunatu prjamoji');
readln(xa,ya,xb,yb);
writeln('vveditj radius kola');
readln(r);
 
        a:=sqrt(sqr(xb-xo)+sqr(yb-yo));      {znahod*y vidstanj mi* to4kamu}
        b:=sqrt(sqr(xa-xo)+sqr(ya-yo));
        c:=sqrt(sqr(xb-xa)+sqr(yb-ya));
writeln('Dov*unu storin trukytnuka',a:10:3,'  ',b:10:3,'  ',c:10:3);
 
p:=a*(sqrt(1-(sqr((b*b-a*a-c*c)/(-2*a*c)))));
writeln('dov*una perpendukyljara',p:10:3);
if p<=r then writeln('prjama le*utj na koli')
 
        else writeln('prjama i kolo ne peretunajutsja');
 
        s:=p/r;
        hor:=(r*r-2*r*p+p*p)*2;
       readln;
       rez:=ArcSin(s);
       rezult:=rez*57.29;
       kyt:=(180-90-rezult)*2;
       writeln('kyt rivnuj',kyt:10:3);
 
        writeln('p',  p:10:3);
        writeln('radius kola',  r);
        writeln('rez:',rez:10:3);
 
        l:=(2*3.14*r*kyt)/360;
        writeln('dov*una hordu',  l:5:3);
        readln;
end.

Объяснение кода листинга программы

  1. Объявляются переменные xo, yo, xa, ya, xb, yb, r, a, b, c, s, hor, rez, rezult, l, kyt: integer; p, z, grad: double; r: byte; beta: single.
  2. Функция ArcSin ( s : Real ) : Real;
  3. Выводятся координаты центра круга.
  4. Вычисляется длина стороны треугольника a, b, c.
  5. Вычисляется высота h, равная разности между радиусом круга r и длиной стороны треугольника, на которую она опущена.
  6. Вычисляется угол между хордой и радиусом, равный arctan(s/sqrt(1-s^2)).
  7. Если угол меньше 0, то преобразуется в отрицательный угол, умножая его на -1.
  8. Проверяется, пересекаются ли прямая и круг. Если пересекаются, выводится сообщение prjama le*utj na kolo, иначе выводится сообщение prjama i kolo ne peretunajutsja.
  9. Вычисляется угол kyt, равный arctan(s/r).
  10. Вычисляется угол hordu, равный arctan(l).
  11. Выводится радиус круга r.
  12. Выводится значение rez: rez*57.29.
  13. Выводится значение kyt: (180-90-rezult)*2.
  14. Выводится значение p: p/r.
  15. Выводится значение l: (23.14r*kyt)/360.
  16. Программа заканчивается.

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы