Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как вычислить центр окружности?  (Прочитано 28744 раз)
0 Пользователей и 1 Гость смотрят эту тему.
DanZer
Гость
« : 02-03-2006 10:27 » 

Задача: Три произвольно заданных точки лежат на окружности. Составить на Паскале программу опредения координат центра этой окружности.

На чем я застрял: раз три точки - ежику ясно: вершины треугольника с описанной вокруг него окружностью. Стороны, площадь, радиус - пожалуйста, не проблема вычислить, т.к. координаты точек есть. Но что дальше?  С ума сойти... В методичке даже подобного ничего нету, включив логику и остатки знаний по геометрии, вторую неделю бьюсь с идеей нахождения через серединные перпендикуляры к сторонам.

Т.е. если одну сторону получившегося треугольника представить, как часть графика функции Y=kX+b, то перпендикуляр, если не ошибаюсь, будет Yp=-X/k+b (так?). Если добавить поправочный коэф-т, чтоб при Хсреднем давал Yсреднее - формула серединного перпендикуляра готова. Но как найти точку пересечения этих самых перпендикуляров (aka центр окружности) - вообще идей нету, школьная математика успела вылететь напрочь за эти годы. Да и было ли оно такое в школе?

А может есть более простой алгоритм? Задачка-то считается обычной контрольной для заочников, всего лишь второе задание из 4, причем остальные три я расщелкал как орешки...
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 02-03-2006 10:47 » 

Три точки - еще не значит вписанный треугольник. В условиях же сказано: произвольно заданные. Делать такие выводы неправильно.
У тебя три точки дуги и надо найти радиус-вектор для одной из точек.
Входные данные тебе дают начальную, конечную и промежуточную точки дуги. Назначить роли ты можешь поизвольно - меняется дуга, но не ее радиус. Поройся в справочниках по геометрии.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
xelos
Гость
« Ответ #2 : 02-03-2006 11:47 » 

Три точки - еще не значит вписанный треугольник. В условиях же сказано: произвольно заданные. Делать такие выводы неправильно.
У тебя три точки дуги и надо найти радиус-вектор для одной из точек.
а как еще, если не вписанный треугольник?

уравнение окружности в общем виде:
A*x^2+B*x+A*y^2+C*y+D = 0,

при условии, что B^2+C^2-4*A*D>0

тогда центр (a,b) будет :

a=-B/(2*A)
b=-C/(2*A)

ну и радиус:
R^2 = (B^2+C^2-4*A*D)/(4*A^2)
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 02-03-2006 12:07 » 

Так как три точки лежат на окружности, то центр этой окружности лежит на пересечении серединных перпендикуляров к отрезкам, соединяющих точки.  Это доказывается в два шага.  Теперь как найти точку пересечения.

Сначала определимся с уравнением для перпендикуляра.  Пусть отрезок соединяет точки с координатами (х1, у1) и (х2, у2).  Тогда средняя точка отрезка есть ( (х1+х2)/2,  (у1+у2)/2), а уравнение перпендикуляра будет
Код:
(x2-x1)(x - (x1+x2)/2) + (y2-y1)(y - (y1+y2)/2) = 0, или другими словами
(x2-x1)x + (y2-y1)y = (x2-x1)(x2+x1)/2 + (y2-y1)(y2+y1)/2

Перепендикуляр ко второму отрезку задаётся аналогично.  Центр лежит на пересечении этих прямых, то есть удовлетворяет системе линейных уравнений
Код:
(x2-x1)x + (y2-y1)y = (x2-x1)(x2+x1)/2 + (y2-y1)(y2+y1)/2,
(x3-x1)x + (y3-y1)y = (x3-x1)(x3+x1)/2 + (y3-y1)(y3+y1)/2

Если не помнишь, как решать линейные уравнения, напомню.  Решение системы
Код:
A1*x + B1*y = C1,
A2*x + B2*x = C2

есть пара точек:
Код:
x = (C1*B2 - C2*B1)/(A1*B2 - A2*B1), y = (A1*C2 - A2*C1)/(A1*B2 - A2*B1)

Теперь, надеюсь, сам справишься. Уравнения написаны, формула для решения дана.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
DanZer
Гость
« Ответ #4 : 03-03-2006 00:55 » 

Спасибо, это именно то, что надо было. Улыбаюсь
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 03-03-2006 03:59 » 

Так, я всё равно не понял, а зачем треугольник? Разве эти три точки не удовлетворяют уравнению одной и той же окружности? Вопрос же стоит как проще. Система трёх уравнений с тремя неизвестными - решается. Зачем геометрия с треугольником?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
DanZer
Гость
« Ответ #6 : 04-03-2006 11:07 » 

Даже при решении через уравнение окружности не обойтись без треугольника для нахождения радиуса. И потом, в уравнении окружности есть 2 неизвестных, которые непонятно было как вычислять. Впрочем, благодаря данным здесь советам, задача уже практически готова. Еще раз спасибо всем за помощь.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 04-03-2006 22:49 » 

Даже при решении через уравнение окружности не обойтись без треугольника для нахождения радиуса.

При решении системой уравнений - НЕТ (см ниже)  - 3 точки это минимум, для решения задачи. А если бы было четыре точки? Нужен был бы прямоугольник? Ага

в уравнении окружности есть 2 неизвестных, которые непонятно было как ычислять.

Не понял? Ну ладно, разберёмся.
Итак первое - сорри, сразу не было достаточно времени, для объяснений, и ещё одно сори - я в запарке неправильно записал уравнение окружности в первом посте. Если всё ещё актуально, вот так это делается без треугольника:

если известно, что точка лежит на окружности - это значит, что координаты этой точки удовлетворяют уравнению окружности. Если три (4,5,6 и тд) точки лежат на окружности, то они все удовлетворяют одному и тому же уравнению. Тогда для точек P1(X1,Y1) P2(X2,Y2) P3(X3,Y3) лежащих на окружности радиуса R с центром в точке X,Y можно записать

(X1-X)^2 + (Y1-Y)^2 = R^2
(X2-X)^2 + (Y2-Y)^2 = R^2
(X3-X)^2 + (Y3-Y)^2 = R^2

те получили систему из 3х уравнений с тремя неизвестными X,Y,R - система имеет решение. Кстати, в условии твоей задачи не упоминается про радиус. В варианте с системой уравнений он тебе и не нужен, ну если хочешь, то тоже можешь найти. Это же является доказательством того, что по двум точкам ты не сможешь решить задачу. Система двух уравнений с тремя неизвестными не решается. И никакого треугольника. Улыбаюсь

зы Посмотрел выкладки npak-а - не исключено, что у получится то же самое. Ага
« Последнее редактирование: 04-03-2006 22:53 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 04-03-2006 23:37 » 

Цитата
Система двух уравнений с тремя неизвестными не решается.
Отвлекусь от темы. Вообще говоря это утверждение не совсем верно. Например, посмотри диофантовы уравнения.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 04-03-2006 23:51 » new

dimka, конечно же я имел ввиду самый общий случай. Я припоминаю, то ли на дифурах, то ли на ММФ тоже нечто подобное было. Ща уже не помню (давно было), я вон сразу даже вместо уравнения окружности чушь написал - а когда уравнения расписывать стал - понял. В данном случае двух точек мало, чтобы однозначно определить окружность. Представь себе для примера - это координаты точек пересечения двух окружностей, тогда у тебя есть две возможные окружности.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines