Определить, пересекаются ли прямая и круг. - 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.
Объяснение кода листинга программы
- Объявляются переменные 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.
- Функция ArcSin ( s : Real ) : Real;
- Выводятся координаты центра круга.
- Вычисляется длина стороны треугольника a, b, c.
- Вычисляется высота h, равная разности между радиусом круга r и длиной стороны треугольника, на которую она опущена.
- Вычисляется угол между хордой и радиусом, равный arctan(s/sqrt(1-s^2)).
- Если угол меньше 0, то преобразуется в отрицательный угол, умножая его на -1.
- Проверяется, пересекаются ли прямая и круг. Если пересекаются, выводится сообщение
prjama le*utj na kolo
, иначе выводится сообщениеprjama i kolo ne peretunajutsja
. - Вычисляется угол kyt, равный arctan(s/r).
- Вычисляется угол hordu, равный arctan(l).
- Выводится радиус круга r.
- Выводится значение rez: rez*57.29.
- Выводится значение kyt: (180-90-rezult)*2.
- Выводится значение p: p/r.
- Выводится значение l: (23.14r*kyt)/360.
- Программа заканчивается.