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

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

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

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


Гость






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


Бывалый
***

Группа: Пользователи
Сообщений: 282

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


вот посмотри этот код.
условие задачи: две точки движутся в разных направлениях упруго отражаясь от краёв экрана
при этом движется линия их соединяющая. Удачи

Код

program Lab2;
uses Crt, Graph, Dos;
type
 NaprType = (lup, ldown, rup, rdown);
var
 GrDriver, GrMode, ErrCode: Integer;
 x1, y1, x2, y2: Integer;
 NaprP1, NaprP2: NaprType;
 h, m, s, s100, sec: Word;

procedure SelectNapr(var Napr1, Napr2: NaprType);
begin

 case Random(4) of
  0: Napr1 := lup;
  1: Napr1 := ldown;
  2: Napr1 := rup;
  3: Napr1 := rdown;
 end;

 case Random(4) of
  0: Napr2 := lup;
  1: Napr2 := ldown;
  2: Napr2 := rup;
  3: Napr2 := rdown;
 end;

 if Napr1 = Napr2 then SelectNapr(Napr1, Napr2);

end;

procedure MovPoint(var x, y: Integer; var Napr: NaprType);
begin

 case Napr of
  lup     : begin x := x - 2; y := y - 1; end;
  ldown   : begin x := x - 2; y := y + 1; end;
  rup     : begin x := x + 2; y := y - 1; end;
  rdown   : begin x := x + 2; y := y + 1; end;
 end;

if x <= 0 then
 begin
  case Napr of
   lup  : Napr := rup;
   ldown: Napr := rdown;
  end;
  MovPoint(x, y, Napr);
 end else
if y <= 0 then
 begin
  case Napr of
   lup: Napr := ldown;
   rup: Napr := rdown;
  end;
  MovPoint(x, y, Napr);
 end else
if x >= 639 then
 begin
  case Napr of
   rup  : Napr := lup;
   rdown: Napr := ldown;
  end;
  MovPoint(x, y, Napr);
 end else
if y >= 479 then
 begin
  case Napr of
   ldown: Napr := lup;
   rdown: Napr := rup;
  end;
  MovPoint(x, y, Napr);
 end;

end;

Begin

 ClrScr;
 GrDriver := VGA;
 GrMode := VGAHi;
 InitGraph(GrDriver, GrMode, 'C:TPBGI');
 ErrCode := GraphResult;
 if ErrCode <> grOk then
  begin
   Write('Ошибка инициализации графики: ', GraphErrorMsg(ErrCode));
   repeat until KeyPressed;
   Halt(0);
  end;

 Randomize;
 x1 := Random(GetMaxX + 1);
 y1 := Random(GetMaxY + 1);
 x2 := Random(GetMaxX + 1);
 y2 := Random(GetMaxY + 1);
 SelectNapr(NaprP1, NaprP2);
 GetTime(h, m, s, s100);
 sec := s;
 SetColor(Random(GetMaxColor) + 1);
 SetWriteMode(XorPut);

 repeat
  GetTime(h, m, s, s100);
  if sec <> s  then
   begin
    sec := s;
    SetColor(Random(GetMaxColor) + 1);
   end;
  Line(x1, y1, x2, y2);
  Delay(50);
  Line(x1, y1, x2, y2);
  MovPoint(x1, y1, NaprP1);
  MovPoint(x2, y2, NaprP2);
 until KeyPressed;

 CloseGraph;

End.


Сообщение отредактировано: volvo - 17.12.2004 11:06
 Оффлайн  Профиль  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 13:16
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"