Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
26 / 26 / 42
Регистрация: 25.03.2014
Сообщений: 233
1

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

06.02.2015, 18:23. Показов 3515. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Заданы координаты центра окружности, ее радиус и коэффициенты a, b, c уравнения прямой. Вывести количество точек пересечения и их координаты.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.02.2015, 18:23
Ответы с готовыми решениями:

Найти точку пересечения прямой и оси абсцисс
программа которая на входе получает шесть чисел a, b, c, d, e, f, а выводит: если точки нет, то...

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

Координаты прямой и окружности
Здравствуйте!Помогите решить задачу.Всю голову уже сломал. Найти координаты пересечения прямой...

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

5
Эксперт Pascal/Delphi
6811 / 4568 / 4819
Регистрация: 05.06.2014
Сообщений: 22,438
07.02.2015, 15:43 2
Определить и выдать на печать число точек пересечений прямой с окружностью
0
26 / 26 / 42
Регистрация: 25.03.2014
Сообщений: 233
07.02.2015, 19:45  [ТС] 3
1. Центр окружности - не начало координат
2. Даны коэффициенты a, b, c, а не k, b
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
07.02.2015, 20:18 4
Есть система из двух уравнений
(x - x0)^2 + (y - y0)^2 = r^2 (окружность)
a*x + b*y + c = 0 (прямая)
a,b одновременно не равны 0, это устанавливается при вводе данных.
Выражаете из второго уравнения х или y и подставляете в первое. После преобразований получите квадратное уравнение, если его дискриминант<0 пересечений нет, =0, касание в 1 точке, >0 2 точки пересечения.
0
26 / 26 / 42
Регистрация: 25.03.2014
Сообщений: 233
08.02.2015, 00:15  [ТС] 5
Большое спасибо! Не заметил квадратного уравнения

Добавлено через 2 часа 10 минут
Я где-то ошибся, но не могу понять, где.
Помогите, пожалуйста
Pascal
1
2
3
a := sqr(b1) + sqr(a1);
b := 2 * b1 * c1 - 2 * a1 * x * b1 - 2 * sqr(a1) * y;
c := sqr(c1) - 2 * a1 * x * c1 + sqr(a1) * x + sqr(a1) * sqr(y) - sqr(a1) * sqr(r);
a1, b1, c1 - коэффициенты уравнения прямой

Добавлено через 1 час 32 минуты
Немного изменил, но все равно неправильный ответ.
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
var
  x, y, r, a, b, c, a1, b1, c1, d, yo, xo, yo2, xo2: double;
  
begin
  readln(x, y, r, a1, b1, c1);
  a := sqr(b1) + sqr(a1);
  b := 2 * b1 * c1 - 2 * a1 * x * b1 - 2 * sqr(a1) * y;
  c := sqr(c1) - 2 * a1 * x * c1 + sqr(a1) * x + sqr(a1) * sqr(y) - sqr(a1) * sqr(r);
  d := sqr(b1) - 4 * a1 * c1;
  if d < 0 then
    writeln(0)
  else
    if d = 0 then
    begin
      yo := -b / (2 * a);
      xo := -((b1 * yo + c1) / a1);
      writeln(1);
      writeln(xo, ' ', yo);
    end
    else
    begin
      yo := (-b + sqrt(d)) / (2 * a);
      xo := -((b1 * yo + c1) / a1);
      yo2 := (-b - sqrt(d)) / (2 * a);
      xo2 := -((b1 * yo2 + c1) / a1);
      writeln(2);
      writeln(xo, ' ', yo);
      writeln(xo2, ' ', yo2);
    end;
end.
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
08.02.2015, 11:02 6
Я решил чуть по другому, дело в том что коэффициенты a или b могут быть =0 и непонятно что можно выразить из 2 уравнения, нужно рассматривать 2 по сути равнодлинных условия.
Я отдельно рассмотрел случай вертикальной прямой (b=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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
var x0,y0,r:real;//координаты центра окружности, радиус
    a,b,c:real; //коэффициенты прямой ax+by+c=0
    x1,y1,x2,y2:real;//координаты точек пересечения
    k,s:real;//коэффициенты прямой y=kx+s
    x,a1,b1,c1,d:real; //вспомогательные переменные
begin
clrscr;
repeat
write('Радиус окружности r>0 r=');
readln(r);
until r>0;
writeln('Координаты центра окружности');
readln(x0,y0);
repeat
writeln('Коэффициенты a,b,c a и b одновремено не равны 0');
readln(a,b,c);
until(a<>0)or(b<>0);
if b=0 then //прямая вертикальна
 begin
  x:=-c/a;
  if (x0-r>x)or(x0+r<x) then write('Окружность и прямая не пересекаются')
  else if (x0-r=x)or(x0+r=x) then  write('Прямая касается окружности в точке (',x:0:2,';',y0:0:2,')')
  else
   begin
    y1:=y0+sqrt(r*r-sqr(x0-x));
    y2:=y0-sqrt(r*r-sqr(x0-x));
    write('Прямая пересекает окружность в 2-х точках (',x:0:2,';',y1:0:2,')  (',x:0:2,';',y2:0:2,')');
   end;
 end
else //другие случаи
 begin
  k:=-a/b;//преобразуем уравнение ax+by+c=0 к виду y=kx+s
  s:=-c/b;
  //и решим систему
  //(x - x0)^2 + (y - y0)^2 = r^2 (окружность)
  //y=kx+s {прямая}
  //после приведения найдем коэффициенты уравнения a1x^2+b1x+c1=0
  a1:=1+k*k;
  b1:=-2*x0+2*k*s-2*k*y0;
  c1:=s*s+x0*x0-2*s*y0+y0*y0-r*r;
  d:=b1*b1-4*a1*c1;
  if d<0 then write('Прямая и окружность не пересекаются')
  else if d=0 then
   begin
    x1:=-b1/(2*a1);
    y1:=k*x1+s;
    write('Прямая касается окружности в точке (',x1:0:2,';',y1:0:2,')')
   end
  else
   begin
    x1:=(-b1+sqrt(d))/(2*a1);
    x2:=(-b1-sqrt(d))/(2*a1);
    y1:=k*x1+s;
    y2:=k*x2+s;
    writeln('Прямая пересекает окружность в 2-х точках:');
    write('(',x1:0:2,';',y1:0:2,')  (',x2:0:2,';',y2:0:2,')');
   end;
 end
end.
0
08.02.2015, 11:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2015, 11:02
Помогаю со студенческими работами здесь

Найти координаты точки пересечения
Добрый день форумчане , нужен совет) Никак не могу понять смысл 6 задания, пожалуйста, подскажите...

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

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

На плоскости заданы прямая и точка. Найти координаты точки, симметричной относительно прямой
10. На плоскости заданы прямая и точка. Найти координаты точки, симметричной относительно прямой.


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru