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

Спецификация, входные и выходные данные. Организация данных, класс 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.