Помощь в написании студенческих работ
Антистрессовый сервис

Разработка программы реализующей эмуляцию упругого столкновения мячей

КонтрольнаяПомощь в написанииУзнать стоимостьмоей работы

Мы должны проверить на достижения мячом границ определенной площади экрана, для этого определяем его границу и сравниваем с количеством пикселей по данной оси. Если выполняется одно из условий тогда изменяем вектор скорости на противоположный по данной оси. И после проделываем тоже самое для следующего шарика. Также учитываем, что мяч может перескочить через границу из-за большого значения… Читать ещё >

Разработка программы реализующей эмуляцию упругого столкновения мячей (реферат, курсовая, диплом, контрольная)

Постановка задачи

В прямоугольной рамке, равной поверхности экрана, движутся N мячей, радиусами r1,…, rn. Они соударяются между собой, ударяются о края рамки. Начальное положение и вектор скорости для каждого шара случайные. Написать программу, моделирующую и отображающую на экране их движение. Удары считать абсолютно упругими, силу трения не учитывать.

Спецификация

Входные данные:

Информация, вводимая в специальном окне: для каждого графического объекта задается радиус, составляющие.

Выходные данные:

Графический интерфейс в виде диалогового окна позволяющий добавлять мячи, под средством вызова специального диалогового окна, изменять данные прямо в процессе работы программы без ее остановки, прерывать программу.

Программа должна:

Реализовать перемещение n-ого количества мячей которые отталкиваются от границ заданной области и друг от друга согласно правилам упругого удара.

Методика решения Написание программы производилось в три основных этапа: разработка иерархии классов, описание собственно алгоритма программы, разработка графического интерфейса и объединение двух первых пунктов в единое целое.

Задачу можно разбить на 3 блока:

Задание начальных параметров (который происходит в режиме диалога).

Непосредственно работы программы, т. е. реализация упругого столкновения мячей.

Возможность добавления объектов и изменения данных во время работы программы.

Задание начальных параметров предполагает, прежде всего, инициализацию массива объектов класса, определение некоторых характеристик каждого объекта в соответствии с полями которые приписаны ему в описании класса.

Непосредственно работа программы подразумевает графическое отображение на экране монитора столкновение мячей с границей определенной области и друг с другом. Алгоритм реализации данной части программы будет описан ниже.

Также в программе реализована возможность добавлять, изменять и удалять мячи прямо в процессе исполнения программы. Создание и удаление объектов происходит под средством вызова определенных методов, а изменение свойств каждого объекта с помощью визуальных компонентов.

Организация данных

В программе описано два класса TBall и TBalls.

Класс TBall содержит поля, методы и свойства.

Поля:

_x,_y:integer; - координаты центра мяча по x и y.

_rad:integer; - радиус мяча.

_color:integer;- цвет мяча.

_dx:integer; - вектор скорости по x.

_dy:integer;- вектор скорости по y.

Методы:

constructor Create (rad, color, dx, dy, x, y:integer); - создание объекта.

destructor Destroy; override; -уничтожение объекта.

Свойства, позволяющие считывать и устанавливать значения соответствующих полей:

property x: integer read _x write _x;

property y: integer read _y write _y;

property rad: integer read _rad write _rad;

property color: integer read _color write _color;

property dx: integer read _dx write _dx;

property dy: integer read _dy write _dy;

Класс TBalls содержит массив мячей, каждый из которых это объект класса TBall.

Поля:

Balls :array[0.100] of TBall; - массив мячей.

num: integer;- количество элементов в массиве.

Методы присущие данному классу:

function Add (x, y, dx, dy, col, rad: integer):boolean;- добавить мяч.

function del (n:integer):boolean;- удалить мяч.

function GetData (i:integer):TBall;- метод чтения.

procedure SetData (i:integer; Value: TBall);- метод записи.

Свойство позволяет получить информацию об объекте:

property Items[i:integer]: Tball read GetData write SetData;

Описание алгоритма

Алгоритм определения расчета движения мячей после соударения друг с другом:

Во вложенном цикле сравниваем каждый мячик по отдельности со всеми последующими. Для этого определяем расстояние между координатами центров и сравниваем с суммой радиусов. Если расстояние между центрами становится меньше суммы радиусов тогда по правилу упругого удара, меняем вектор скорости одного с другим. И после этого они продолжают перемещаться уже с другими скоростями. При этом для того, что бы не возникало никаких ошибок при столкновении их друг с другом, к координатам по x и по y прибавляем значение вектора скорости на данную ось и перерисовываем. Это позволяет избежать залипания мячей друг в друге, из-за различных значений векторов скорости одного и другого.

Алгоритм проверки на соударение каждого мяча с границами экрана:

Мы должны проверить на достижения мячом границ определенной площади экрана, для этого определяем его границу и сравниваем с количеством пикселей по данной оси. Если выполняется одно из условий тогда изменяем вектор скорости на противоположный по данной оси. И после проделываем тоже самое для следующего шарика. Также учитываем, что мяч может перескочить через границу из-за большого значения вектора скорости, во избежание данного события сделаем также как и при столкновении мячей, друг с другом, т. е. откинем мяч назначение вектора скорости от границы по каждой оси при их столкновении.

Текст программы

Приведем описание классов:

unit Unit2;

interface

uses Windows, SysUtils, Classes, Graphics, Math;

type

TBall=class

private

_x,_y: integer;

_rad: integer;

_color: integer;

_dx: integer;

_dy: integer;

public

constructor Create (rad, color, dx, dy, x, y:integer);

destructor Destroy; override;

property x: integer read _x write _x;

property y: integer read _y write _y;

property rad: integer read _rad write _rad;

property color: integer read _color write _color;

property dx: integer read _dx write _dx;

property dy: integer read _dy write _dy;

end;

TBalls=class

private

function GetData (i:integer):TBall;

procedure SetData (i:integer; Value: TBall);

public

Balls :array[0.100] of TBall;

num: integer;

constructor Create;

destructor Destroy; override;

function Add (x, y, dx, dy, col, rad: integer):boolean;

function del (n:integer):boolean;

property Items[i:integer]: Tball read GetData write SetData;

end;

implementation

constructor TBall. Create (rad, color, dx, dy, x, y:integer);

begin

_x:=x;

_y:=y;

_rad :=rad;

_color:= color;

_dx := dx;

_dy := dy;

end;

destructor TBall. Destroy;

begin

inherited;

end;

constructor TBalls. Create;

begin

num:=0;

end;

destructor TBalls. Destroy;

var i: integer;

begin

for i:=0 to num-1 do

Balls[i]. Destroy;

inherited;

end;

function TBalls. GetData (i:integer):TBall;

begin

GetData:=Balls[i];

end;

procedure TBalls. SetData (i:integer; Value: TBall);

begin

Balls[i]: =Value;

end;

function Tballs. Add (x, y, dx, dy, col, rad: integer):boolean;

begin

if (num<101)and (num>=0) then begin

Balls[num]: =TBall.Create (rad, col, dx, dy, x, y);

num:=num+1;

Add:=true;

end

else

Add:=false;

end;

function Tballs. del (n:integer):boolean;

var i: integer;

begin

if (n=0) then begin

Balls[n]. Destroy;

for i:=n to num-2 do

Balls[i]: =Balls[i+1];

num:=num-1;

del:=true;

end

else

del:=false;

end;

end.

Методика тестирования

При проведении тестирования необходимо проверить:

Правильно ли обрабатываются щелчки мыши.

Корректно ли происходит соударение мячей в заданной области экрана.

Корректность работы графического интерфейса.

Прочие различные ситуации, при которых корректность работы программы трудно предсказать.

данная программа алгоритм

Результаты тестирования

Ситуация во время работы программы

Ожидаемый результат

Результат работы программы

Обычная работа программы с вводом всех данных.

Корректная работа.

Корректная работа.

При создании достаточно большого количества объектов (>30).

Корректная работа.

Возможно залипание мячей друг на друге или на границах (бывает очень редко)

При изменении радиуса мяча, на такое значение при котором он перекрывает границе.

Корректная работа.

Залипание мяча на границе.

На маломощных машинах при создании достаточно большого количества объектов.

Корректная работа.

Возможно медленная работа программы и частое мерцание мячей из-за перерисовки.

1. Задорина Н. А., Сухарева И. В. Объектно-ориентированное программирование: Практикум. — Рыбинск: РГАТА, 2006. — 52 с.

2. Рапаков Г. Г., Ржэуцкая С. Ю. Turbo Pascal для студентов и школьников. — СПб.: БХВ-Петербург, 2002. — 352 с.

3. Архангельский А. Я. Приёмы программирования в DELPHI. — М.: Изд-во Бином, 2004. — 828 с.

Показать весь текст
Заполнить форму текущей работой