Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2011, 18:50   #1
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
Сообщение Задать интервал лучей солнца

Значит так, задание такое: нарисовать солнце с лучами, длины которых выбираются случайным образом из интервала (20, 80).
Начал писать, вот что уже говтово
Код:
uses crt,graph;
const CENTR_X=200; CENTR_Y=200; {центр окружности}
RADIUS = 50; LUCH_LEN = 90;   {радиус и длина луча }

var
d,m : smallint;
i : integer;
xx,yy : integer;

begin
clrscr;
d := detect;
initgraph(d,m,'');
setcolor(14);  { меняем цвет на желтый }
circle(CENTR_X,CENTR_Y,RADIUS); { рисуем окружность }
setfillstyle(1,14);      { устанавливаем стиль закрашивания }
floodfill(CENTR_X,CENTR_Y,14);   { закрашиваем окружность }

{ теперь рисуем лучи. Весго 8. Для каждого луча ищем приращение }
for i:=1 to 8 do
 begin
 case i of
 1 : begin
     xx := 0;
     yy := -LUCH_LEN;
     end;
 2 : begin
     xx := round(LUCH_LEN/sqrt(2));;
     yy := -round(LUCH_LEN/sqrt(2));;
     end;
 3 : begin
     xx := LUCH_LEN;
     yy := 0;
     end;
 4 : begin
     xx := round(LUCH_LEN/sqrt(2));;
     yy := round(LUCH_LEN/sqrt(2));;
     end;
 5 : begin
     xx := 0;
     yy := LUCH_LEN;
     end;
 6 : begin
     xx := -round(LUCH_LEN/sqrt(2));;
     yy := round(LUCH_LEN/sqrt(2));;
     end;
 7 : begin
     xx := -LUCH_LEN;
     yy := 0;
     end;
 8 : begin
     xx := -round(LUCH_LEN/sqrt(2));
     yy := -round(LUCH_LEN/sqrt(2));
     end;
 end; {case}
 moveto(CENTR_X,CENTR_Y);  { ставим указатель в центр окружности }
 linerel(xx,yy);      { рисуем луч }
 end;
 { вот и солнце )) }
readln;
closegraph;
end.
Так вот, главный вопрос, как сделать, чтобы длина луча была рандом(20,80)?? в константу я ж пихну рандомное значение! а как правильно сделать, чтобы выбиралось рандомное значение? я уже как не писал, солнышко выходит вообще без лучей!
gylayko вне форума Ответить с цитированием
Старый 11.12.2011, 18:54   #2
Leo08
Delphi master
Пользователь
 
Аватар для Leo08
 
Регистрация: 28.05.2011
Сообщений: 96
По умолчанию

А зачем использовать константу? Используйте переменную.
Для установки рандомного значения:
Код:
...
var
x:integer;
...
x:=random(60)+20;
...
БЯЯЯГГАААААА
Leo08 вне форума Ответить с цитированием
Старый 11.12.2011, 19:07   #3
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
Счастье

я пробовал вот так:
Код:
uses crt,graph;
const CENTR_X=200; CENTR_Y=200; {центр окружности}
RADIUS = 50;    {радиус и длина луча }

var
d,m,LUCH_LEN : integer;
i : integer;
xx,yy : integer;

begin
clrscr;
LUCH_LEN:=random(60)+20;
d := detect;
initgraph(d,m,'');
setcolor(14);  { меняем цвет на желтый }
circle(CENTR_X,CENTR_Y,RADIUS); { рисуем окружность }
setfillstyle(1,14);      { устанавливаем стиль закрашивания }
floodfill(CENTR_X,CENTR_Y,14);   { закрашиваем окружность } и т.д.
но в таком случай солнце получается без лучей вообще!
gylayko вне форума Ответить с цитированием
Старый 11.12.2011, 19:16   #4
Leo08
Delphi master
Пользователь
 
Аватар для Leo08
 
Регистрация: 28.05.2011
Сообщений: 96
По умолчанию

Код:
uses crt,graph;
const CENTR_X=200; CENTR_Y=200; {центр окружности}
RADIUS = 50;  {радиус и длина луча }

var
d,m : smallint;
i : integer;
xx,yy : integer;

begin
clrscr;
d := detect;
initgraph(d,m,'');
setcolor(14);  { меняем цвет на желтый }
circle(CENTR_X,CENTR_Y,RADIUS); { рисуем окружность }
setfillstyle(1,14);      { устанавливаем стиль закрашивания }
floodfill(CENTR_X,CENTR_Y,14);   { закрашиваем окружность }

{ теперь рисуем лучи. Весго 8. Для каждого луча ищем приращение }
for i:=1 to 8 do
 begin
 case i of
 1 : begin
     xx := 0;
     yy := -(random(60)+20);
     end;
 2 : begin
     xx := round((random(60)+20)/sqrt(2));;
     yy := -round((random(60)+20)/sqrt(2));;
     end;
 3 : begin
     xx := (random(60)+20);
     yy := 0;
     end;
 4 : begin
     xx := round((random(60)+20)/sqrt(2));;
     yy := round((random(60)+20)/sqrt(2));;
     end;
 5 : begin
     xx := 0;
     yy := (random(60)+20);
     end;
 6 : begin
     xx := -round((random(60)+20)/sqrt(2));;
     yy := round((random(60)+20)/sqrt(2));;
     end;
 7 : begin
     xx := -(random(60)+20);
     yy := 0;
     end;
 8 : begin
     xx := -round((random(60)+20)/sqrt(2));
     yy := -round((random(60)+20)/sqrt(2));
     end;
 end; {case}
 moveto(CENTR_X,CENTR_Y);  { ставим указатель в центр окружности }
 linerel(xx,yy);      { рисуем луч }
 end;
 { вот и солнце )) }
readln;
closegraph;
end.
БЯЯЯГГАААААА
Leo08 вне форума Ответить с цитированием
Старый 11.12.2011, 19:30   #5
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию

и снова солнце без лучей!!!!!
gylayko вне форума Ответить с цитированием
Старый 11.12.2011, 19:37   #6
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию

в общем, я понял в чем ошибка, лучей невидно потому что радиус солнца 50, поэтому к длине луча нужно добавить 50, сделал я так! получилось солнце с лучами. теперь же проблема в том, что нужно чтобы все лучи были одинаковой длины, а не разных!
gylayko вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Трассировка лучей facebook23 Помощь студентам 0 08.06.2011 23:45
Как задать интервал чисел? AnderoN Помощь студентам 5 03.06.2011 17:33
обратная трассировка лучей и тор _ ошибка в коде или рассуждениях? Anna221 Помощь студентам 0 10.05.2011 18:36
как задать интервал таймера меньше секунды Marsel737 Общие вопросы Delphi 3 19.03.2010 14:37
Как задать интервал между датами в фильтре Леон Microsoft Office Access 2 22.10.2008 11:16