Как реализовать красивую траекторию шара? - 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, шару задается движение вправо по оси x и вниз по оси y.
- При направлении 2, шару задается движение вправо по оси x и вперед по оси y.
- При направлении 3, шару задается движение вправо по оси x и вверх по оси y.
- При направлении 4, шару задается движение влево по оси x и вниз по оси y.
- При направлении 5, шару задается движение влево по оси x и вверх по оси y.
- При направлении 6, шару задается движение влево по оси x и вперед по оси y.
- При направлении 7, шару задается движение влево по оси x и вверх по оси y. Таким образом, при каждом вызове процедуры SetDirection, направление движения шара будет определено в соответствии с переданным значением и шару будут установлены соответствующие координаты движения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д