Страница 1 из 1

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

Добавлено: 27 мар 2007, 20:33
nicola
На плоскости имеется набор окружностей, разного радиуса.
Выявить все окружности, не пересекающиеся с другими.

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

Добавлено: 28 мар 2007, 08:52
somewhere
Две окружности с радиусами 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;

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

Добавлено: 28 мар 2007, 09:54
Хыиуду
В таком случае
Type TCircle = record
X,Y,R:Real;

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

Добавлено: 28 мар 2007, 13:08
nicola
Гениально!!!
Мне хотелось бы еще и нарисовать эти окружности

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

Добавлено: 28 мар 2007, 14:32
Хыиуду
Form1.Canvas.Ellipse(C.X-C.R, C.Y-C.R, C.X+C.R, C.Y-C.R);

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

Добавлено: 28 мар 2007, 17:18
nicola
это для дельфи прокатит а на паскале самневаюсь

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

Добавлено: 29 мар 2007, 10:01
Хыиуду
Заменить Form1.Canvas.Ellipse на Circle, предварительно инициировав графический режим экрана.