Ребята! Где-то тут ошибка. Условие в том, что надо рисовать сначала крест потом круги с радиусом в его концах. А потом опять крест. И так чтоб все потихоньку уменьшалось в 2 раза. Вот сделала, но надо чтоб он не рисовал ничего в сторону центра. Не подскажете, пожалуйста, в чём прикол?
Michael_Rybak
13.09.2006 21:52
Добавь параметр came_from, который будет означать, откуда мы пришли (по какому направлению). Получится что-то такое (не запускал):
procedure ll(x,y,l,sk,came_from:integer); begin if came_from <> DIR_UP then line(x,y, x, y+l); if came_from <> DIR_DOWN then line(x,y, x, y-l); if came_from <> DIR_LEFT then line(x,y, x+l, y); if came_from <> DIR_RIGHT then line(x,y, x-l, y); if sk>1 then begin if came_from <> DIR_LEFT then ll(x+l, y, l div 4, sk-1, DIR_RIGHT); if came_from <> DIR_RIGHT then ll(x-l, y, l div 4, sk-1, DIR_LEFT); if came_from <> DIR_DOWN then ll(x, y-l, l div 4, sk-1, DIR_UP); if came_from <> DIR_UP then ll(x, y+l, l div 4, sk-1, DIR_DOWN); end; end;
Michael_Rybak, я теперь совсем запуталась Это обязательно такие константы надо ставить? У меня от них голова болит
Michael_Rybak
13.09.2006 22:12
Цитата(Anastacia Adesso @ 13.09.2006 18:07)
Это обязательно такие константы надо ставить? У меня от них голова болит
Ну назвать их можешь по-другому . Смысл в том, что ты идешь из каждой точки рекурсивно во все 4 стороны. А идти в 4 стороны надо только в самый первый раз, а дальше - в 3 стороны, кроме той, откуда пришли. Правильно я понимаю? Для этого и нужны эти константы, чтобы передавать, откуда мы пришли, и не ветвиться в ту сторону. Представь, как бы ты это рисовала руками.
Ну или я неправильно понял, что тебе нужно. Нарисуй, что ли, в paint'е набросок.
Anastacia Adesso
13.09.2006 22:15
Volvo, это не совсем то.. но прикольно!
воть типа.. рисум крест. потом круги но тока в три конца. к основанию креста не надо
Michael_Rybak, да именно тока в три стороны. Но говорят это и без констант можно сделать. Не знаешь как?
volvo
13.09.2006 22:27
Цитата
к основанию креста не надо
Ну, не надо, так не надо
Michael_Rybak
13.09.2006 22:32
Цитата(Anastacia Adesso @ 13.09.2006 18:15)
Но говорят это и без констант можно сделать. Не знаешь как?
Можно, например, передавать dx и dy. И идти прямо, навлево, и направо.
Например, направление вверх задается парой dx = 0, dy = -1. Повернувшись на 90 градусов по часовой стрелке, мы получим координаты new_dx := -dy, new_dy := dx, а против часовой - new_dx := dy, new_dy := -dx
Код не запускал.
uses crt, graph; var l, x, y, sk, r:integer; gr, gm: integer;
procedure ll(x,y,dx,dy,l,r,sk:integer); begin line(x, y, x + dx * l, y + dy * l); circle(x + dx * l, y + dy * l, r); line(x, y, x - dy * l, y + dx * l); circle(x - dy * l, y + dx * l, r); line(x, y, x + dy * l, y - dx * l); circle(x + dy * l, y - dx * l, r);
if sk>1 then begin ll(x, y, x + dx * l, y + dy * l, dx, dy, l div 4, r div 4, sk - 1); ll(x, y, x - dy * l, y + dx * l, -dy, dx, l div 4, r div 4, sk - 1); ll(x, y, x + dy * l, y - dx * l, dy, -dx, l div 4, r div 4, sk - 1); end;
Спасибо!!!! Мы тут ещё подумали.. Посмотрите как сделали!!!
Lapp
20.09.2006 8:03
Цитата(Anastacia Adesso @ 19.09.2006 11:40)
Посмотрите как сделали!!!
Смотрим... Слушай, а ты не могла бы постить русскую или английскую версию? Боюсь, тут мало кто понимает латышский..
Красиво! Но, мне кажется, не совсем рационально.. Если я правильно понял (что не факт), то может быть вот, что сгодится.. Нажмите для просмотра прикрепленного файла И я еще подправил немного ввод - так, из любви к искусству, хотя - убей, не понимаю, что это значит