Как реализовать красивую траекторию шара? - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Есть шар(основной), внутри, которого шар меньшего радиуса. Надо реализовать движение меньшего шара внутри круга(недолжен из него выйти). Код:
 Uses wingraph,crt;
Var Gd, Gm : smallint;
    x, y, N,M,x1,y1,yi : Integer;
begin
clrscr;
  Writeln('Write N'); Readln(N);//радиус большего шара
  Writeln('Write M');Readln(M);//радиус меньшего
  gd := d8bit; gm := mFullScr;
  InitGraph(Gd, Gm, '');
  if GraphResult <> grOk Then Halt(1);
  x:=getMaxX div 2; y:=GetMaxy div 2; //координаты большего
 x1:=x; y1:=y; //координаты меньшего
  yi:=1; 
  repeat
     if (sqrt(sqr(x-x1)+sqr(y-y1))>=N-M) then  yi:=-yi; //проверка на пересечение.
 
                  setActivePage(1);clearDevice;
 
                  y1:=y1-1*yi; x1:=x1+1*yi;
                  Circle(x,y,N);
                 Circle(x1,y1,M);
                 SetVisualPage(1);
                 SetActivePage(0); clearDevice;
 
                 y1:=y1-1*yi; x1:=x1+1*yi;
                  Circle(x,y,N);
                 Circle(x1,y1,M);
                 SetvisualPage(0);
  until KeyPressed;
closegraph
end.
Проблема с следующем. У меня шар движется лишь по горизонтали, не меняя своей траектории. При попытке добавить переменнх в его траектории,как то ее разнообразить(это вышло,с использванием рандома),но шар стал пересекать границы основного ,а то и выйти за его пределы может. Как реализовать его траекторию, что бы было не однообразно и самое главное, что бы он не пересекал границы основного?

Решение задачи: «Как реализовать красивую траекторию шара?»

textual
Листинг программы
procedure SetDirection(dir: Integer; var dx, dy: Integer);
begin
  case dir of
    0: begin dx:= 0; dy:= 1; end;
    1: begin dx:= 1; dy:=-1; end;
    2: begin dx:= 1; dy:= 0; end;
    3: begin dx:= 1; dy:= 1; end;
    4: begin dx:= 0; dy:=-1; end;
    5: begin dx:=-1; dy:= 1; end;
    6: begin dx:=-1; dy:= 0; end;
    7: begin dx:=-1; dy:=-1; end;
  end;
end;

Объяснение кода листинга программы

В данном коде реализована процедура SetDirection, которая принимает на вход направление движения шара в виде целого числа от 0 до 7 и через переменные dx и dy устанавливает соответствующие значения для этого направления. Внутри процедуры используется оператор case, который определяет каждое из возможных значений направления и устанавливает соответствующие значения для переменных dx и dy. Например, при получении значения направления 0, переменная dx будет установлена равной 0, а переменная dy будет установлена равной 1. Это соответствует движению шара вверх по оси x. Аналогично для остальных значений направления:

  1. При направлении 1, шару задается движение вправо по оси x и вниз по оси y.
  2. При направлении 2, шару задается движение вправо по оси x и вперед по оси y.
  3. При направлении 3, шару задается движение вправо по оси x и вверх по оси y.
  4. При направлении 4, шару задается движение влево по оси x и вниз по оси y.
  5. При направлении 5, шару задается движение влево по оси x и вверх по оси y.
  6. При направлении 6, шару задается движение влево по оси x и вперед по оси y.
  7. При направлении 7, шару задается движение влево по оси x и вверх по оси y. Таким образом, при каждом вызове процедуры SetDirection, направление движения шара будет определено в соответствии с переданным значением и шару будут установлены соответствующие координаты движения.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы