Разработка программы реализующей эмуляцию упругого столкновения мячей
Спецификация, входные и выходные данные. Организация данных, класс TBall и TBalls. Свойства, позволяющие считывать и устанавливать значения соответствующих полей. Алгоритм определения расчета движения мячей после соударения друг с другом, текст программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 16.09.2012 |
Размер файла | 15,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Постановка задачи
В прямоугольной рамке, равной поверхности экрана, движутся 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<num)and(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 с.
Размещено на Allbest.ru
Подобные документы
Разработка и тестирование программы класса Точка. Спецификация программы. Сценарий диалога с пользователем. Разработка структур данных и алгоритмов. Таблица параметров функций программы. Текст программы на языке C++. Особенности тестирования программы.
лабораторная работа [43,1 K], добавлен 21.07.2012Программа на языке Turbo Pascal для шифрования данных с помощью шифра Тритемиуса. Входные, выходные данные. Схема алгоритма и текст программы. Порядок ввода исходных данных и описание получаемых результатов. Тестовых задания и анализ их функционирования.
курсовая работа [4,0 M], добавлен 06.01.2011Математическая постановка задачи. Обоснование выбора средств разработки. Входные и выходные данные работы программы. Решение задачи теста для написания и отладки программы. Описание программных модулей. Разработка алгоритма, анализ полученных результатов.
курсовая работа [2,2 M], добавлен 13.12.2015Общие сведения о языке ассемблера. Назначение команды прерывания INT число. Описание логической структуры программы: алгоритм работы, используемые методы, входные и выходные данные. Структура и тестирование программы. Руководство оператора программы.
курсовая работа [90,0 K], добавлен 01.12.2009Структура математической модели линейной задачи, алгоритм симплекс-метода. Разработка программы: выбор языка программирования, входные и выходные данные, пользовательский интерфейс. Описание программы по листингу, тестирование, инструкция по применению.
курсовая работа [1,2 M], добавлен 31.05.2013Формальная постановка задачи и спецификация программы. Сценарий диалога с пользователем. Разработка структур данных и алгоритмов. Таблица параметров и текст программы на языке C++. Тестирование программы с целью определения корректности ее работы.
контрольная работа [27,5 K], добавлен 07.07.2012Технико-математическое описание задачи. Требования к программе учета книг и читателей библиотеки. Описание языка программирования. Алгоритмы обработки информации. Текст программы. Инструкция на выполнение: вызов и загрузка, входные и выходные данные.
дипломная работа [1,2 M], добавлен 29.06.2012Разработка эскизного и технического проектов программы, ее назначение и область применения, описание алгоритма, организация входных и выходных данных. Выбор состава технических и программных средств, разработка рабочего проекта, спецификация программы.
курсовая работа [159,8 K], добавлен 26.01.2010Разработка эскизного и технического проектов программы, моделирующей игру "Кости". Постановка задачи, описание алгоритма; написание программы, организация входных и выходных данных; выбор программных средств; спецификация, текст, условия выполнения.
курсовая работа [93,8 K], добавлен 11.02.2012Описание платформы NET Framework. База данных Microsoft Access. Разработка Windows приложения. Модель программирования Windows Forms. Функциональное назначение программы. Входные и выходные данные. Требования к техническому и программному обеспечению.
курсовая работа [2,2 M], добавлен 15.03.2015