Помогите с задачкой на паскале

Ответить
nicola
Сообщения: 3
Зарегистрирован: 24 мар 2007, 08:18

На плоскости имеется набор окружностей, разного радиуса.
Выявить все окружности, не пересекающиеся с другими.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Две окружности с радиусами R1 и R2 и центрами в точках О1 и О2 однозначно не пересекаются, если расстояние между центрами > R1+R2. Далее остается их все попарно сравнить.

Код: Выделить всё

Type TCircle = record
                      X,Y,Z:Real;
                      end;
...
...
function IsCrossed(C1,C2:TCircle):Boolean;
begin
IsCrossed := Sqr(C1.X-C2.X) + Sqr(C1.Y-C2.Y) <= Sqr(C1.R+C2.R);
end;
It's a long way to the top if you wanna rock'n'roll
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

В таком случае
Type TCircle = record
X,Y,R:Real;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
nicola
Сообщения: 3
Зарегистрирован: 24 мар 2007, 08:18

Гениально!!!
Мне хотелось бы еще и нарисовать эти окружности
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Form1.Canvas.Ellipse(C.X-C.R, C.Y-C.R, C.X+C.R, C.Y-C.R);
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
nicola
Сообщения: 3
Зарегистрирован: 24 мар 2007, 08:18

это для дельфи прокатит а на паскале самневаюсь
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Заменить Form1.Canvas.Ellipse на Circle, предварительно инициировав графический режим экрана.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить