Помощь - Поиск - Пользователи - Календарь
Полная версия: Радиус круга
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Домовой
Здравствуйте... еще раз ))
Попалось такое задание:
Даны координаты N точек: (xi, yi), i=1,2,...,N. Найти радиус наименьшего круга с центром в начале координат, внутрь которого попадают все эти точки.
В принципе, честно говоря, понял его только перечитав раз 20, это точно.
Так как я геометрию не любил даже еще со школьной программы.
Для составления програмки не поленился, нашел формулу радиуса с центром в начале координат ))
Сделал сначала элементарную програмульку, где ввобишь координаты 2 точек, а она выводит их радиус:

Код
program okruj;
var
x, y, r, : real;
begin
write('x= ');
readln(x);
write('y= ');
readln(y);
R:=Sqr(x)+Sqr(y);
r:=sqr®;
writeln('radius = ', r:2:0);
readln;
writeln;
end.


У меня вопрос - наверняка кто-то уже встречался с подобного рода задачами.
Как вбить данные в массив - это вроде понятно, но как сложить один радиус... из скажем 5 точек?
т.е. при каждом действии в массиве считать по этой йормуле, а дальше запоминать?
Потом плюсовать?
гмммммммм...
Есть над чем подумать,
прошу помочь.
Пасиб

Специально для кода у нас есть спец. тэг code
GoodWind
ищешь точку, наиболее удаленную от центра координат - растояние до нее и будет радиусом искомой окружности.
volvo
А ты не подумал, что искомый радиус будет равен максимальному из расстояний от точки до начала координат? blum.gif

Иначе круг просто не закроет какую-либо из точек...
Домовой
гм... гмм... гм...
хм...
blink.gif
Так чУвО мне выбрать то?
Какая формула то правильная, иль действие?


ААА... точно же!
ну я и дурак...
то есть получается, что я грубо говорю конечно,
человек ввел 2 точки, координаты первой - 1 и 1,
а координаты второй 2 и 5... то радиус высчитывается по второму... мдя...
А если захотят ввести 20 точек, с различными координатами, то чего тады делать?
т.е. получается высчитывать координаты каждой, потом каждую пихать в какой-нить массив, а затем сравнивать и выбирать больший?
Я проверил на программке,
что точка с коорд. 2 и 2 имеет радиус 64, а с коорд. 3 и 1 - 100.
Так что суммирование, чувствую, тут не поможет.
Иль по проще можно?
GoodWind
даю установку:
найди максимальное расстояние от начала координат до одной из точек и будет тебе счастье.

0-=-=-0
я все сказал wacko.gif
Домовой
так высчитывание расстояния возможно тока по радиусу?

алень я ))
вот формула , да?
т.е. для высчитывание расстояния до точки:
sqr(x)+sqr(y)
GoodWind
Код
sqrt(sqr(x)+sqr(y))

так вернее будет... wink.gif

и не надо тебе хранить расстояния в массиве. В массиве ты храни координаты точек, а потом пройди по ним циклом:

Код
for i:=0 to n do if sqrt(sqr(a[i].x)+sqr(a[i].y))>max then max:=sqrt(sqr(a[i].x)+sqr(a[i].y));


массив опиши так:

Код
const n=10; {это размер твоего массива}
type coord=record
                    x,y:word;
                  end;

var a:array [1..n] of cood;


дальше все должно быть понятно...
volvo
Цитата
В массиве ты храни координаты точек, а потом пройди по ним циклом
blink.gif Это еще зачем? Достаточно сразу при вводе очередной точки вычислять ее расстояние до начала координат, и сравнить с максимальным на данный момент... Зачем лишние циклы?
Домовой
GoodWind, volvo
Спасибо Вам большое smile.gif)
P.S. честно говоря массив - это слово я поставил автоматом, когда сообщение печатал smile.gif
Я программер на PHP и все оттудова беру...
но оказывается в Паскале он тож есть ))
Altair
Можно я поизвращаюсь ?
1. найти выпуклую оболочку множества точек.
2. http://forum.pascalnet.ru/index.php?showtopic=2898
good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.