Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LabWork2

.pdf
Скачиваний:
6
Добавлен:
11.02.2015
Размер:
297.9 Кб
Скачать

Это означает, что в случае центрального упругого соударения объектов с равными массами, они будут просто обмениваться скоростями. Если один из объектов до столкновения покоился, то после столкновения он остановится, а второй объект начнѐт движение. При этом скорость движения второго объекта будет равна скорости первого объекта до столкновения.

В общем случае центрального и абсолютно упругого столкновения объектов с разными массами, один из которых до столкновения покоился (v2i =0), можно записать следующие выражения для скоростей после удара:

v1 = v1i (m1 - m2) / (m1 + m2) v2 = v1i (2 m1) / (m1 + m2)

Если масса налетающего шара m1 больше массы покоящегося шара m2 , то v1 и v2 будут положительными и оба шара после столкновения будут двигаться в одном направлении, совпадающем с направлением начального движения налетающего шара.

Если же масса налетающего шара m1 меньше массы покоящегося шара m2 , то v1 будет отрицательной, а v2 - положительной, и шары после столкновения будут разлетаться в противоположных направлениях. При этом, т.к. 2 m1>m1 - m2 , то маленький шарик отразиться с большей скоростью.

Нецентральное упругое столкновение

Картина соударения при нецентральном ударе будет совсем иной. Здесь во время удара имеет место как приближение центров шаров друг к другу вследствие их деформации, так и скольжение поверхности одного шара по поверхности другого. Очевидно, что вследствие скольжения поверхностей возникнут силы трения, которые вместе с упругими силами взаимодействия определят изменение скорости шаров после удара. Кроме того, силы трения вызовут вращение шаров относительно их центров масс.

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

Расчет направления движения шаров после столкновения

Расчитаем направление движения двух шаров после нецентрального (общий случай) столкновения.

Модифицируем метод Move класса CBallsArray так, чтобы он просматривал список шаров на предмет столкновений и расчитывал скорости после столкновения.

Запускаем программу и видим результат. Недостатком данного подхода является то, что возможно взаимное проникновение шаров, которое приводит

к их слипанию. Тем не менее для простейшего способа моделирования достигается вполне приемлемый результат.

Добавление другого типа шаров

Поставим задачу добавить новый типа шаров, производный от исходного, но имеющий атрибут – цвет.

Для того, чтобы унифицировать интерфейс шаров и использовать преимущества динамического полиморфизма, добавим в класс CBall метод SetColor, задающий цвет шара. В данном классе этот метод не будет выполнять никаких функций.

Не забудьте добавить описание метода в определение класса!

Создадим новый класс CColoredBall, унаследованный от CBall:

В конструкторе класса будем создавать кисть, а в деструкторе уничтожать. Метод SetColor уничтожает старую кисть и создает новую. Также переопределяется метод Draw, так как его функция немного отличается.

Добавим в CBallsArray реализацию метода AddColoredBall, которая будет создавать и возвращать окрашенный шар.

Добавление окрашенного шара в окно будем осуществлять по нажатию правой кнопки мыши (сообщение WM_RBUTTONUP).

Индивидуальные задания

1.Модифицируйте программу таким образом, чтобы при помощи клавиш ‘Q’ и ‘A’ можно было бы задавать радиус создаваемого шара (по аналогии с скоростью и направлением). Необходимо обеспечить визуализацию создаваемого радиуса, как в примере с направлением и скоростью.

2.Модифицируйте программу таким образом, чтобы при помощи клавиш 1, 2, 3, 4, 5, 6 можно было задавать цвет создаваемого по правой кнопке мыши шара (например 1,2 – r+/r-; 3,4 – g+/g-; 5,6 – b+/b-). Цвет шара должен визуализироваться как в примере с направлением и скоростью.

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

4.Модифицируйте программу таким образом, чтобы у шаров было понятие массы. Реализуйте способы добавления шаров разной массы (например по левой кнопке мыши – легкие, по правой - тяжелые). Модифицируйте математику столкновения шаров с учетом массы.

5.Модифицируйте программу таким образом, чтобы при нажатии средней кнопки мыши (WM_MBUTTONUP) добавлялся новый тип шаров – окрашенные, окраска которых становится со временем менее насышенной, пока они не станут неокрашенными. Скорость потери окраски задается.

6.Модифицируйте программу таким образом, чтобы при нажатии средней кнопки мыши добавлялся новый тип шаров – с ограниченным временем жизни. Время жизни задается в секундах. По окончании времени жизни шар исчезает с экрана.

7.Модифицируйте программу таким образом, чтобы по нажатию средней кнопки мыши добавлялись 8 шаров, разлетающихся в разные стороны в направлениях, различающихся на 45 градусов.

8.Модифицируйте программу таким образом, чтобы по нажатию средней кнопки мыши добавлялся новый тип шаров – уничтожающиеся при столкновении. Если сталкиваются уничтожающийся и неуничтожающийся шары, то неуничтожающийся отлетает, а уничтожающийся исчезает. При столкновении двух уничтожающихся шаров исчезаю оба. Для идентификации уничтожающихся шаров необходимо придать им определенную окраску.

Соседние файлы в предмете Компьютерная Графика