IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Наложение фигур
ТОХА
сообщение 28.03.2011 15:38
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Антон

Репутация: -  1  +


Здравствуйте!
при написании одного из модулей программы я столкнулся с такой проблемой как наложение фигур друг на друга. Как сделать так чтоб последующая фигура рисовалась на свободном месте экрана и не накладывалась на другие?
 uses Crt, Graph;
const k=100;
var
GraphDriver, GraphMode: Integer;
X1,y1, r: Integer;ch:char;
begin
GraphDriver := Detect;
InitGraph(GraphDriver, GraphMode, ' ');
if GraphResult<> grOk then
Halt(1);
repeat
ch:=readkey;
if ch=chr(13) then begin
X1 := Random(640-k)+k;
y1 := Random(480-k)+k;
r:=Random(k)+1;
circle(X1,y1,r);
end;
until ch=chr(27);
CloseGraph;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
andriano
сообщение 2.04.2011 14:18
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата
Предлагаю придумать не потенциально-бесконечный алгоритм.

Действительно, стоит изменить лишь одну константу:
r := Random(k) + 20;
чтобы потенциально бесконечный алгоритм превратился в реально бесконечный.
Действительно, хороший алгоритм должен:
1. Давать правильный результат при корректных данных.
2. Давать предсказуемый результат (в частности, отсутствие деструктивных действий таких как завершение программы по ошибке, зацикливание, порча памяти...) при некорректных данных.
Очевидно, если алгоритм приводит к зацикливанию программы при изменении внешних констант (т.е. таких, которые не являются имманентной частью алгоритма), то это плохой алгоритм.
Желательно также, чтобы он сообщал пользователю о конкретной ошибке.
Предлагаю что-то вроде.
      IntIt := 0;
repeat
r := Random(k) + 20;
X1 := Random(GetMaxX - r*2) + r;
Y1 := Random(GetMaxY - r*2) + r;

ok := true;
for i := 1 to curr do
ok := ok and (sqr(C[i].X - X1) + sqr(C[i].Y - Y1) >
sqr(R + C[i].R));
inc(IntIt);
until ok or (IntIt > MaxIt);
inc(curr);
if IntIt > MaxIt then
writeln('Ошибка: невозможно разместить ',curr,'-ю окружность');



Да, прошу еще обратить внимание на порядок, в котором определяются характеристики окружностей, и как именно это сделано (3-5 строки листинга).

Сообщение отредактировано: andriano - 2.04.2011 14:20
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
ТОХА   Наложение фигур   28.03.2011 15:38
мисс_граффити   фигуры - только круги? а что делать, если свободны...   28.03.2011 16:57
ТОХА   да, только круги это просто часть моей игры на зап...   28.03.2011 17:01
volvo   Если только круги - то можно сделать uses Crt, ...   28.03.2011 22:39
ТОХА   uses (sqr(C[i].X - X1) + sqr(C[i].Y - ...   28.03.2011 22:55
volvo   Чего ж тут такого особенного? Чистая логика. Когда...   29.03.2011 0:44
ТОХА   точно это ж геометрия за 8 класс :)   29.03.2011 0:49
TarasBer   > repeat random... until ok; Предлагаю п...   29.03.2011 9:13
volvo   Не проблема. Только не надо мне рассказывать ,что ...   29.03.2011 9:52
TarasBer   > Random - это генератор, который возвращает ра...   29.03.2011 10:05
ТОХА   смысл игры в том, что нужно запомнить какой шарик ...   29.03.2011 11:31
TarasBer   > TarasBer, надеюсь я ответил на твой вопрос Н...   29.03.2011 12:16
volvo   Это твои заморочки. Оно ОБЯЗАНО отработать по изло...   29.03.2011 14:40
ТОХА   небольшой оффтоп как пользоваться коммандой MouseI...   29.03.2011 14:51
TarasBer   > Это твои заморочки. Оно ОБЯЗАНО отработать по...   29.03.2011 15:03
ТОХА   Спасибо )   29.03.2011 15:15
ТОХА   немного запутался и возникло 2 проблемы: мышь полз...   29.03.2011 17:48
volvo   Максимальное время различается не больше, чем на 2...   29.03.2011 19:06
ТОХА   нашел, исправил, а что делать с мышкой?   29.03.2011 21:07
TarasBer   > Максимальное время различается не больше, чем...   30.03.2011 9:30
ТОХА   мышку одолел, вопрос покажется странным но как с...   31.03.2011 22:52
volvo   Вообще самым оптимальным было бы использовать граф...   1.04.2011 17:20
ТОХА   а с помощью комманд getimage и putimage можно сдел...   1.04.2011 18:39
volvo   А ты знаешь, мне тут еще один финт в голову пришел...   1.04.2011 19:08
ТОХА   работает, правда белый цвет поменялся на голубой, ...   1.04.2011 19:17
volvo   Ты б прикрепил весь файл полностью (можно в приват...   1.04.2011 20:01
ТОХА   ок в приват скину, а то при защите найдут проект м...   1.04.2011 20:05
volvo   Что-то я не понял, чего ты творишь... Вот тут: все...   1.04.2011 20:55
ТОХА   модуль мыши просто из FAQ брал, как я и предполог...   1.04.2011 21:02
ТОХА   ошибка в buttonpress это 100%, изменил условие нач...   1.04.2011 21:46
volvo   Так... Нашел DosBox с шестым Турбо-Паскалем... Вот...   1.04.2011 21:50
ТОХА   Эврика :) все работает, буду до конца вечера тести...   1.04.2011 22:15
andriano   Действительно, стоит изменить лишь одну константу...   2.04.2011 14:18
volvo   А ты не меняй, и алгоритм бесконечным не будет. Ес...   2.04.2011 14:46
ТОХА   защитил проект сегодня удачно :) всем спасибо за п...   2.04.2011 16:31
Lapp   кому интересно что получилось прикладываю проект, ...   3.04.2011 2:09
ТОХА   я не студент :) учусь в 10 классе)   3.04.2011 12:51


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 1.07.2025 12:59
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"