![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
FENIX |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 45 Пол: Мужской Репутация: ![]() ![]() ![]() |
Одно из заданий лабы:
На экране построить N произвольных окружностей (можно использовать функцию Random), допускается их пересечение. Окружности, не пересекающиеся ни с какой другой окружностью, выделить другим цветом или штриховкой. Определить их количество. Не могу найти подходящий алгоритм для выполнения выделенной части. Вот процедура рисования :low: Код Procedure graphic; var grDriver, grMode, ErrCode, x, y, n : integer; Begin ClrScr; write('BBEDUTE N= '); readln(n); grDriver:=Detect; InitGraph(grDriver, grMode, 'A:\'); ErrCode:=GraphResult; If ErrCode = grOk then begin x := GetMaxX div 2; y := GetMaxY div 2; Repeat {SetColor(succ(Random(white)));} SetColor(White); SetLineStyle(0,0,2*Random(2)+1); x := Random(GetMaxX); y := Random(GetMaxY); Circle(x, y, Random(GetMaxY div 5)); Dec(N); Until N=0; If ReadKey=#0 then x := ord(ReadKey); ReadLn; CloseGraph; end else WriteLn('System failure: Matrix Reloaded :D', GraphErrorMsg(ErrCode)); |
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Напрмиер так:
заносим все данные (для каждого круга: x,y и радиус, + цвет переменная) в массив. Затем поочереди берем окружности ипроверяем,если расстояние между центрами меньше суммы радиусов то они пересекаются, тог аодним цветом рисуем иначе другим. p.s. важно е замечание: необходимо предусмореть, что окружность можетюыть вложенна. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
FENIX |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 45 Пол: Мужской Репутация: ![]() ![]() ![]() |
А как окружности в массив заносить?
Код A[i] := Circle(x, y, R) ??? |
APAL |
![]()
Сообщение
#4
|
![]() Смотрю... ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: ![]() ![]() ![]() |
Пример:
Код Const N = 5; Type crcl = Record x,y,r : Integer; End; Var m : Array [1..N] of crcl; Begin ..... For i:=1 to N do Begin m[i].x:= Round(Random(640)); m[i].y:= Round(Random(480)); m[i].r:= Round(Random(400)); End; ..... End. -------------------- |
Altair |
![]()
Сообщение
#5
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
![]() ------------------------ ладно.... есть много способов... например так: Код Uses Graph,CRT; Const NN=100; Var A:Array[1..nn] of record x,y,r:longint; col:byte end; Gd,gm:integer; n,i,j:longint; color:byte; Begin readln(n); randomize; for i:=1 to n do {генерируем случайные окружности} begin a[i].x:=random(640); a[i].y:=random(480); a[i].r:=random(300); end; {*** ЗДЕСЬ ИЩЕМ ВСЕ ПАРЫ ОКРУЖНОСТЕЙ И ПРОВЕРЯЕМ ПЕРЕСЕКАЮТСЯ ИЛИ НЕТ, И В ЗАВИСИМОВТИ ОТ ЭТОГО ЦВЕТ ВЫДЕЛЯЕМ!!!} readkey; GD:=detect; initgraph(gd,gm,''); {А ТЕПЕРЬ ВЫВОДИМ ВСЕ ОКРУЖНОСТИ НА ЭКРАН} For i:=1 to n do begin setcolor(a[i].col); circle(a[i].x,a[i].y,a[i].r)end; readkey; end. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
FENIX |
![]()
Сообщение
#6
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 45 Пол: Мужской Репутация: ![]() ![]() ![]() |
Огромное спасибо за помощь
![]() |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 13:49 |