3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 34
1

Найти координаты точек пересечения прямой и окружности

20.01.2011, 19:05. Показов 4958. Ответов 3
Метки нет (Все метки)

Найти координаты точек пересечения у=kx+b и окружности радиус R, с центром в начале координат. В каких координатных четвертях находятся точки пересечения?Если точек пересечения нет или прямая касается окружности выдать соответствующее сообщение.
Пожалуйста помогите, надо сдавать а я не в зуб ногой(((
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2011, 19:05
Ответы с готовыми решениями:

Найти координаты точки пересечения окружности
Здравствуйте. Нужно написать программу на паскале. Заданы координаты центра окружности, ее радиус и...

Найти координаты точек пересечения двух окружностей
Найти координаты пунктов пересечения двух окружностей радиусами {R}_{1} и {R}_{2} с центрами в...

Найти координаты точек пересечения прямой и окружности
1) на цикл if Найти координаты точек пересечения прямой y=kx+b и окружности радиусом R и с центром...

Определить, пересекаются ли окружности, в этом случае вычислить координаты точек их пересечения
Даны две окружности одинакового радиуса R , заданные координатами их центров (X1Y1) (X2Y2) -целыми...

3
Почетный модератор
64275 / 47574 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
21.01.2011, 10:04 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Составляем систему уравнений
y=kx+b
y^2+x^2=r^2
и решаем квадратное уравнение
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
uses crt;
var R,k,b,x1,y1,x2,y2,d,a,b1,c:real;
begin
clrscr;
write('Введите радиус окружности R=');
readln(R);
writeln('Введите коэффициенты уравнения прямой k,b:');
readln(k,b);
a:=k*k+1;
b1:=2*k*b;
c:=b*b-r*r;
d:=b1*b1-4*a*c;
if d<0 then writeln('Точек пересечения нет.')
else if d=0 then
 begin
  x1:=-b1/(2*a);
  y1:=k*x1+b;
  writeln('Прямая касается окружности в точке x=',x1:0:2,' y=',y1:0:2);
 end
else if d>0 then
 begin
  x1:=(-b1+sqrt(d))/(2*a);
  y1:=k*x1+b;
  x2:=(-b1-sqrt(d))/(2*a);
  y2:=k*x2+b;
  writeln('Прямая пересекает окружность в двух точках:');
  writeln('x1=',x1:0:2,'  y1=',y1:0:2,'  x2=',x2:0:2,'  y2=',y2:0:2);
  if(x1>0)and(y1>0)then writeln('Точка x1 в первой четверти')
  else if(x1<0)and(y1>0)then writeln('Точка x1 во второй четверти')
  else if(x1<0)and(y1<0)then writeln('Точка x1 в третьей четверти')
  else if(x1>0)and(y1<0)then writeln('Точка x1 в четвертой четверти');
  if(x2>0)and(y2>0)then writeln('Точка x2 в первой четверти')
  else if(x2<0)and(y2>0)then writeln('Точка x2 во второй четверти')
  else if(x2<0)and(y2<0)then writeln('Точка x2 в третьей четверти')
  else if(x2>0)and(y2<0)then writeln('Точка x2 в четвертой четверти')
 end;
end.
1
42 / 42 / 14
Регистрация: 29.12.2010
Сообщений: 159
21.01.2011, 10:55 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Ну, если если в уравнение окружности вместо у подставить kx+b, то получится уравнение https://www.cyberforum.ru/cgi-bin/latex.cgi?{x}^{2}(1+{k}^{2})+2kbx+{b}^{2}-{R}^{2}=0. Решаем его, потом проверяем на координаты... короче, вроде так
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var k,b,r: integer;
x1,y1,x2,y2: real;
begin
writeln('Введите значения k, b, R:');
readln(k,b,r);
if sqr(2*k*b)-4*(1+sqr(k))*(sqr(b)-sqr(r))<0 then writeln('Графики не пересекаются!')
else
 begin 
  x1:=-2*k*b+sqrt(sqr(2*k*b)-4*(1+sqr(k))*(sqr(b)-sqr(r)))/(2*(1+sqr(k)));
  y1:=k*x1+b;
  x2:=-2*k*b-sqrt(sqr(2*k*b)-4*(1+sqr(k))*(sqr(b)-sqr(r)))/(2*(1+sqr(k)));
  y2:=k*x2+b;
  write('x = ',x1:2:2,', y = ',y1:2:2);
  if (x1>0) and (y1>0) then writeln(' - I четверть.');
  if (x1<0) and (y1>0) then writeln(' - II четверть.');
  if (x1<0) and (y1<0) then writeln(' - III четверть.');
  if (x1>0) and (y1<0) then writeln(' - IV четверть.');
  if x1<>x2 then
   begin
    write('x = ',x2:2:2,', y = ',y2:2:2);
    if (x2>0) and (y2>0) then writeln(' - I четверть.');
    if (x2<0) and (y2>0) then writeln(' - II четверть.');
    if (x2<0) and (y2<0) then writeln(' - III четверть.');
    if (x2>0) and (y2<0) then writeln(' - IV четверть.');
   end;
 end;
end.
1
Почетный модератор
64275 / 47574 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
21.01.2011, 12:40 4
Чтобы не городить длинные формулы, я просто ввел 4 дополнительные переменные
Pascal
1
2
3
4
a:=k*k+1;
b1:=2*k*b;
c:=b*b-r*r;
d:=b1*b1-4*a*c;
остальное вроде также...
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2011, 12:40
Помогаю со студенческими работами здесь

Вычислить координаты точек пересечения прямой y  =  kx с окружностью x2 + y2 = r2
Заданы: r – радиус окружности с центром в точке (0, 0), k – тангенс угла наклона прямой...

Найти координаты точек пересечения прямой y=kx+b и окружности
Найти координаты точек пересечения прямой y=kx+b и окружности радиуса R с центром в начале...

Найти координаты точек пересечения прямой и окружности
Помогите пожалуйста новмчку!) Найти координаты точек пересечения прямой y=kx+b и окружности...

Найти координаты точек пересечения прямой и окружности
Найти координаты точек пересечения прямой y=kx+b и окружности радиуса R с центром в начале...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru