Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 08.12.2011, 18:07   #11 (permalink)
gazon
Member
 
Регистрация: 21.11.2011
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Модифицировать программу пчелиный рой, запрогроммировать перемещение роя, и изменение направления при лостижении края экрана
gazon вне форума   Ответить с цитированием

Старый 08.12.2011, 18:07
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Упрощу вам решение проблемы - вот список аналогичных обсуждений

Программа вычисления интеграла на Паскале
Задача на Паскале
Программа на паскале

Старый 10.12.2011, 17:24   #12 (permalink)
gazon
Member
 
Регистрация: 21.11.2011
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Пааамммммааааагиииииитттттееееее,пожалуйста
gazon вне форума   Ответить с цитированием
Старый 10.12.2011, 19:11   #13 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от gazon Посмотреть сообщение
Пааамммммааааагиииииитттттееееее,пожалуйста
Не, ну до чего настырный товарищ!
Ладно, вот Вам Ваш рой. Программа прерывается нажатием любой клавиши.
Код:
uses graph,crt;
var
 j,gd,gm,i,c,R,T,dLx,dLy,MaxX,MaxY,Lx,Ly,r0,t0:integer;
 x,y,k:array [1..1000] of integer;
 b:boolean;
Begin
 randomize;
 gd:=detect;
 initgraph(gd,gm,'d:\tp7\units\');
 c:=6;
 r0:=12;
 MaxX:=GetMaxX;
 MaxY:=GetMaxY;
 for i:=1 to 1000 do
  begin
   R:=Random(50);
   T:=Random(360);
   x[i]:=50+Round(7*Sqrt(R)*Cos(Pi*T/180));
   y[i]:=50+Round(7*Sqrt(R)*Sin(Pi*T/180));
   putpixel(x[i],y[i],c);
  end;
 Lx:=10;
 Ly:=Round(SQRT(sqr(r0)-sqr(Lx)));
 REPEAT
  Repeat
   b:=false;
   i:=0;
   repeat
    Inc(i);
    dLx:=Round(0.4*Abs(Lx))-Random(Round(0.4*Abs(Lx)));
    dLy:=Round(0.4*Abs(Lx))-Random(Round(0.4*Abs(Lx)));
    putpixel(x[i],y[i],0);
    x[i]:=x[i]+Lx+dLx;
    y[i]:=y[i]+Ly+dLy;
    If (x[i]<0) or (x[i]>MaxX) or (y[i]<0) or (y[i]>MaxY) then
     begin
      b:=true;
      x[i]:=x[i]-Lx-dLx;
      y[i]:=y[i]-Ly-dLy;
      putpixel(x[i],y[i],c);
     end else
    putpixel(x[i],y[i],c);
    delay(1);
   until b or (i=1000);
  Until b or KeyPressed;
  If KeyPressed then
    begin
    CloseGraph;
    Halt(0);
   end;
  t0:=Random(360);
  Lx:=Round(r0*Cos(t0*Pi/180));
  Ly:=Round(r0*Sin(t0*Pi/180));
 UNTIL 0=1;
End.
Vladimir_S вне форума   Ответить с цитированием
Старый 11.12.2011, 14:23   #14 (permalink)
gazon
Member
 
Регистрация: 21.11.2011
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо огромное, огроменное
gazon вне форума   Ответить с цитированием
Старый 11.12.2011, 14:27   #15 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от gazon Посмотреть сообщение
Спасибо огромное, огроменное
Да пожалуйста...
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 11.12.2011, 14:40   #16 (permalink)
gazon
Member
 
Регистрация: 21.11.2011
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

не могли бы вы пояснить некоторые моменты
x[i]:=50+Round(7*Sqrt(R)*Cos(Pi*T/180));
y[i]:=50+Round(7*Sqrt(R)*Sin(Pi*T/180)); я так понял что это "делание" роя круглым?
А что это:
Lx:=10;
Ly:=Round(SQRT(sqr(r0)-sqr(Lx)));
------------------------------------
Inc(i);
dLx:=Round(0.4*Abs(Lx))-Random(Round(0.4*Abs(Lx)));
dLy:=Round(0.4*Abs(Lx))-Random(Round(0.4*Abs(Lx)));
putpixel(x[i],y[i],0);
x[i]:=x[i]+Lx+dLx;
y[i]:=y[i]+Ly+dLy;
gazon вне форума   Ответить с цитированием
Старый 11.12.2011, 14:43   #17 (permalink)
Daniellos
Хозяин Медной Горы
 
Аватар для Daniellos
 
Регистрация: 01.08.2011
Адрес: Армавир
Сообщений: 12,159
Записей в дневнике: 8
Сказал(а) спасибо: 751
Поблагодарили 88 раз(а) в 27 сообщениях
Репутация: 57416
По умолчанию

Цитата:
Сообщение от gazon Посмотреть сообщение
я так понял что это "делание" роя круглым?
Скажем так "неотрицательным"... Берётся модульная величина
Daniellos вне форума   Ответить с цитированием
Старый 11.12.2011, 15:00   #18 (permalink)
gazon
Member
 
Регистрация: 21.11.2011
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Не, а дальше что там, я еще новичок, не могу разобраться.
gazon вне форума   Ответить с цитированием
Старый 11.12.2011, 17:29   #19 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от gazon Посмотреть сообщение
не могли бы вы пояснить некоторые моменты
x[i]:=50+Round(7*Sqrt(R)*Cos(Pi*T/180));
y[i]:=50+Round(7*Sqrt(R)*Sin(Pi*T/180));
я так понял что это "делание" роя круглым?
Мало того, что круглым, но еще и с равномерным заполнением круга. Так, если вместо Round(7*Sqrt(R)*Cos(Pi*T/180)) мы напишем Round(R*Cos(Pi*T/180)), то "концентрация" пчел начнет возрастать от периферии к центру.
Цитата:
Сообщение от gazon Посмотреть сообщение
А что это:
Lx:=10;
Ly:=Round(SQRT(sqr(r0)-sqr(Lx)));
Это компоненты начального вектора перемещения роя за один "скачок": 10 точек вдоль оси X и 7 точек вдоль оси Y. В дальнейшем "скорость" движения роя, определяемая абсолютной величиной скачка (r0=12), сохраняется, случайная выборка варьирует лишь соотношение между X и Y компонентами вектора.
Цитата:
Сообщение от gazon Посмотреть сообщение
Inc(i);
dLx:=Round(0.4*Abs(Lx))-Random(Round(0.4*Abs(Lx)));
dLy:=Round(0.4*Abs(Lx))-Random(Round(0.4*Abs(Lx)));
putpixel(x[i],y[i],0);
x[i]:=x[i]+Lx+dLx;
y[i]:=y[i]+Ly+dLy;
Это случайные вариации (в пределах 40%) тех самых X и Y компонент вектора перемещения для каждой отдельной пчелы вокруг средних значений этих компонент Lx и Ly. Без этих вариаций движение роя представляло бы собой просто перемещение статического распределения точек, а так рой при движении внутри себя переливается. А чего, по-моему красиво получилось.
Vladimir_S вне форума   Ответить с цитированием
Старый 11.12.2011, 18:52   #20 (permalink)
gazon
Member
 
Регистрация: 21.11.2011
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Рахмет большой
gazon вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 10:51.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.