Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2014, 20:53   #1
pavelre
Новичок
Джуниор
 
Регистрация: 04.06.2014
Сообщений: 1
По умолчанию Анимация. Помогите доработать программу.

Добрый день! Подскажите пожалуйста, имеется программа, суть работы в следующем по форме летают 2 объекта, отражаются от стенок, постепенно замедляются и в итоге вообще останавливаются за счет коэффициента сопротивления (как коэф. сопротивления среды в физике) . Задача в следующем, заменить этот коэффициент сопротивления среды на другой. и вот этот другой коэффициент должен работать следующим образом: когда объект касается стенки он должен терять часть своей скорости (10%). Коэффициент сопротивления среды (k) вообще убрать.

Проблема такая, условия при которых объекты касаются стенок уже в исходной программе написаны, но когда я в эти условия добавляю свой коэффициент удара(k2), то объект не отскакивает от нижней стенки а начинает идти вдоль нее, то есть теряет игрековую составляющую скорости. Подскажите как сделать чтобы объекты нормально отскакивали и теряли энергию (скорость) при отскоке. Буду признателен если скинете, рабочую программу с отскоком. Исходную программу залил на файлообменник http://rghost.ru/58541550

Исходный Текст модуля:

Код:
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, ExtCtrls;
type
TMyshape =class
xw,yw:integer;
x,y:real;
m:real;
vx,vy:real;
Shape: TShape;
constructor Create(sh:TShape);
procedure MakeMove(time:real);
end;

implementation
constructor TMyshape.Create(sh:Tshape) ;
begin
shape:=sh;
self.m:=50;
x:=sh.Left;
y:=sh.Top;
self.vx:=100;
self.vy:=300;
end;


procedure TMyshape.MakeMove(time:real);

const
g=9.8;
k=1.0;
k2=0.9;
begin
if vy>0 then vy:=vy-k*g*time
else vy:=vy+k*g*time;
if vx>0 then vx:=vx-k*g*time
else vx:=vx+k*g*time;
x:=x+vx*time;
y:=y+vy*time;
Shape.Top:=round(y);
Shape.Left:=round(x);



if ((shape.Left+shape.Width)>=xw) then vx:=0-k2*vx; //Условия касания стенки
if ((shape.Top+shape.Height)>=yw) then vy:=0-k2*vy;
if (shape.Left<0) then vx:=0-k2*vx;
if (shape.Top<0) then vy:=0-k2*vy;
end;
end.

end.

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 16.10.2014 в 01:56.
pavelre вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите доработать программу alexlagunov Visual C++ 19 28.04.2014 12:18
Помогите доработать программу. Паскаль Руслан56 Помощь студентам 0 11.03.2014 20:00
Помогите доработать программу на ассемлере: Программа выводит шестнадцатеричные числа в двоичном виде. Nickolay0512 Помощь студентам 0 04.12.2013 11:54
Помогите доработать программу, заполнить массив случайными значениями . serg.malkow2014 Помощь студентам 2 27.11.2013 01:41