Другие языки программирования и технологии
общую окружность охватывающую все точки
из файла взяты координаты произвольных точек, нужно найти центр и минимальный радиус окружности в который входят все точки
На самом деле задача не такая тривиальная.
Если точка одна, то решение очевидно.
Если точки две, то тоже - диаметром окружности будет отрезок между этими точками.
Если же точек больше двух, то нужно проверить два случая:
а) все точки лежат внутри окружности, построенной на максимальном отрезке как на диаметре
б) все точки лежат внутри некоторой окружности, построенной по трём из них.
Таким образом, схема решения следующая:
1) пишете функцию, возвращающую для двух точек координаты и центр окружности, построенной на них, как на диаметре
2) пишете функцию, возвращающую для трех точек координаты и центр проходящей через них окружности
3) пишете функцию, проверяющую, что массив точек лежит внутри окружности с заданными центром и радиусом
4) считываете из файла массив точек (пусть их будет N)
5) организуете два цикла: от i =1 до N и от j=i+1 до N. Для i-й и j-й точки получаете центр и радиус функцией из п. 1, затем функцией из п. 3 проверяете, что остальные точки лежат внутри этой окружности.
6) если в п. 5 окружность не найдена, организуете три цикла: от i =1 до N, от j=i+1 до N, от k=j+1 до N. Для i-й, j-й, k-й точек получаете центр и радиус функцией из п. 2, затем функцией из п. 3 проверяете, что остальные точки лежат внутри этой окружности.
7) выводите результат.
Если точка одна, то решение очевидно.
Если точки две, то тоже - диаметром окружности будет отрезок между этими точками.
Если же точек больше двух, то нужно проверить два случая:
а) все точки лежат внутри окружности, построенной на максимальном отрезке как на диаметре
б) все точки лежат внутри некоторой окружности, построенной по трём из них.
Таким образом, схема решения следующая:
1) пишете функцию, возвращающую для двух точек координаты и центр окружности, построенной на них, как на диаметре
2) пишете функцию, возвращающую для трех точек координаты и центр проходящей через них окружности
3) пишете функцию, проверяющую, что массив точек лежит внутри окружности с заданными центром и радиусом
4) считываете из файла массив точек (пусть их будет N)
5) организуете два цикла: от i =1 до N и от j=i+1 до N. Для i-й и j-й точки получаете центр и радиус функцией из п. 1, затем функцией из п. 3 проверяете, что остальные точки лежат внутри этой окружности.
6) если в п. 5 окружность не найдена, организуете три цикла: от i =1 до N, от j=i+1 до N, от k=j+1 до N. Для i-й, j-й, k-й точек получаете центр и радиус функцией из п. 2, затем функцией из п. 3 проверяете, что остальные точки лежат внутри этой окружности.
7) выводите результат.
Найти самый длинный отрезок и поделить его пополам сможете?
Похожие вопросы
- Как найти ближайшую точку на окружности к той, что вне окружности???
- Pascal ABC! Анимация движения точки в пределах окружности!
- Охватывающий огонь
- adobe illustrator/ как повернуть объект относительно центра окружности
- Класс: Окружность, заданная радиусом и координатами центра. Нужно узнать будут ли пересекатся две заданных окружности.
- Как в кореле объекты расположить по окружности?
- Как определить точку внутри треугольника? Turbo Delphi
- Delphi7 - как создать линии с единой точкой старта?
- Треугольники, круги, точки и линии
- Программа, определяющая принадлежность точек к прямой(язык программирования С)