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

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

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

> Угол
Shaienn
сообщение 14.02.2003 13:51
Сообщение #1


Гость






Здравствуйте программеры...
Подскажите, если кто сталкивался, как реализовать в графической программе правило "Угол падения равен углу отражения"... Вот сижу, думаю, а ничего не идет..
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
dark0ut
сообщение 15.02.2003 19:01
Сообщение #2


Пионер
**

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

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


Ну это вот так:
здесь даже цвет менять можно smile.gif

Код

uses crt,graph;
var
 gd,gm:integer;
 x,y,r,metod:integer;
 minx,miny,maxx,maxy:integer;
 ch:char;
 zvetm,zvetgr:integer;
 pause:integer;

begin
 gd:=detect;
 initGraph(gd,gm,'D:bpbgi');

 delay(10000);

 zvetgr:=1;

 x:=320;
 y:=240;
 metod:=0;

 minx:=0;
 miny:=0;
 maxx:=639;
 maxy:=479;

 r:=10;

 pause:=150;

 setcolor(zvetgr);
 line(minx,0,minx,480);
 line(maxx,0,maxx,480);
 line(0,miny,640,miny);
 line(0,maxy,640,maxy);

 zvetm:=14;


 while ch<>#27 do
 begin
   setcolor(zvetgr);
   line(minx,0,minx,480);
   line(maxx,0,maxx,480);
   line(0,miny,640,miny);
   line(0,maxy,640,maxy);


   setcolor(zvetm);
   circle(x,y,r);
   delay(pause);
   setcolor(0);
   circle(x,y,r);

   if (metod=0) then
   begin
     x:=x+1;
     y:=y+1;
   end;
   if (metod=1) then
   begin
     x:=x+1;
     y:=y-1;
   end;
   if (metod=2) then
   begin
     x:=x-1;
     y:=y-1;
   end;
   if (metod=3) then
   begin
     x:=x-1;
     y:=y+1;
   end;

   if (x<=minx+r+1) and (metod=2) then metod:=1;
   if (x<=minx+r+1) and (metod=3) then metod:=0;
   if (x>=maxx-r-1) and (metod=1) then metod:=2;
   if (x>=maxx-r-1) and (metod=0) then metod:=3;
   if (y<=miny+r+1) and (metod=1) then metod:=0;
   if (y<=miny+r+1) and (metod=2) then metod:=3;
   if (y>=maxy-r-1) and (metod=3) then metod:=2;
   if (y>=maxy-r-1) and (metod=0) then metod:=1;

   if keypressed then ch:=readkey;


   if (ch='+') and (r<230) and ((2*r)<(maxx-minx-5)) and ((2*r)<(maxy-miny-10)) then
   begin
     r:=r+5;
     ch:=#0;
   end;
   if (ch='-') and (r>10) and ((2*r)<(maxx-minx)) and ((2*r)<(maxy-miny-10)) then
   begin
     r:=r-5;
     ch:=#0;
   end;

   if (ch='a') and ((minx+10)<maxx) and ((2*r)<(maxx-minx-10)) and (minx<640-2*r) and ((x-r)>minx+10)

then
   begin
     setcolor(0);
     line(minx,0,minx,480);
     minx:=minx+10;
     setcolor(zvetgr);
     line(minx,0,minx,480);
     ch:=#0;
   end;
   if (ch='d') and ((maxx-10)>minx) and ((2*r)<(maxx-minx-10)) and (maxx>2*r) and ((x+r)<maxx-10) then
   begin
     setcolor(0);
     line(maxx,0,maxx,480);
     maxx:=maxx-10;
     setcolor(zvetgr);
     line(maxx,0,maxx,480);
     ch:=#0;
   end;
   if (ch='w') and ((miny+10)<maxy) and ((2*r)<(maxy-miny-10)) and (miny<480-2*r) and ((y-r)>miny+10)

then
   begin
     setcolor(0);
     line(0,miny,640,miny);
     miny:=miny+10;
     setcolor(zvetgr);
     line(0,miny,640,miny);
     ch:=#0;
   end;
   if (ch='x') and ((maxy-10)>miny) and ((2*r)<(maxy-miny-10)) and (maxy>2*r) and ((y+r)<maxy-10) then
   begin
     setcolor(0);
     line(0,maxy,640,maxy);
     maxy:=maxy-10;
     setcolor(zvetgr);
     line(0,maxy,640,maxy);
     ch:=#0;
   end;

   if (ch='8') and (miny>0) then
   begin
     setcolor(0);
     line(0,miny,640,miny);
     miny:=miny-10;
     setcolor(zvetgr);
     line(0,miny,640,miny);
     ch:=#0;
   end;

   if (ch='2') and (maxy<470) then
   begin
     setcolor(0);
     line(0,maxy,640,maxy);
     maxy:=maxy+10;
     setcolor(zvetgr);
     line(0,maxy,640,maxy);
     ch:=#0;
   end;


   if (ch='4') and (minx>0) then
   begin
     setcolor(0);
     line(minx,0,minx,480);
     minx:=minx-10;
     setcolor(zvetgr);
     line(minx,0,minx,480);
     ch:=#0;
   end;


   if (ch='6') and (maxx<630) then
   begin
     setcolor(0);
     line(maxx,0,maxx,480);
     maxx:=maxx+10;
     setcolor(zvetgr);
     line(maxx,0,maxx,480);
     ch:=#0;
   end;

   if (ch=']') and (zvetm<14) then
   begin
     zvetm:=zvetm+1;
     ch:=#0;
   end;
   if (ch='[') and (zvetm>1) then
   begin
     zvetm:=zvetm-1;
     ch:=#0;
   end;

   if (ch=',') and (pause>10) then
   begin
     pause:=pause-10;
     ch:=#0;
   end;

   if (ch='.') and (pause<1000) then
   begin
     pause:=pause+10;
     ch:=#0;
   end;

 end;

 closegraph;
end.


Сообщение отредактировано: volvo - 17.12.2004 11:06


--------------------
Админ StudCity.RU
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Shaienn   Угол   14.02.2003 13:51
Some1   Re: Угол   15.02.2003 0:34
___ALex___   Re: Угол   15.02.2003 15:29
Shaienn   Re: Угол   15.02.2003 16:10
dark0ut   Re: Угол   15.02.2003 19:01
Some1   Re: Угол   16.02.2003 1:22
dark0ut   Re: Угол   17.02.2003 21:38
Ricoshet   Re: Угол   20.02.2003 17:59
Some1   Re: Угол   21.02.2003 9:25
___ALex___   Re: Угол   21.02.2003 13:40
___ALex___   Re: Угол   21.02.2003 13:42
Some1   Re: Угол   22.02.2003 10:59


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

 



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