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

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

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

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

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

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

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

5
Эксперт Pascal/Delphi
6811 / 4568 / 4819
Регистрация: 05.06.2014
Сообщений: 22,438
07.02.2015, 15:43
Определить и выдать на печать число точек пересечений прямой с окружностью
0
26 / 26 / 42
Регистрация: 25.03.2014
Сообщений: 233
07.02.2015, 19:45  [ТС]
1. Центр окружности - не начало координат
2. Даны коэффициенты a, b, c, а не k, b
0
Почетный модератор
 Аватар для Puporev
64311 / 47608 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
07.02.2015, 20:18
Есть система из двух уравнений
(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  [ТС]
Большое спасибо! Не заметил квадратного уравнения

Добавлено через 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
Почетный модератор
 Аватар для Puporev
64311 / 47608 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
08.02.2015, 11:02
Я решил чуть по другому, дело в том что коэффициенты 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.02.2015, 11:02
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели. Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
На любовном киберфронте
Alexander-7 01.04.2025
Недавно на одном малоизвестном сайте знакомств мною заинтересовалась девушка: «Текст немного странный. Но, судя по адресу почты, иностранка», – подумал я. Поколебавшись пару суток, я ответил ей:. . .
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер