Доска Гальтона на Delphi, C++, Visual Basic


на C++ Builder 6.0
на Delphi 7



Изобразить на экране доску Гальтона с движущимися по ней шариками. Одновременно по доске должно двигаться несколько шариков. Использовать датчик случайных чисел для выбора пути шарика при прохождении через препятствие. Подсчитать число шариков, попавших в каждое из отделений.

Так или «примерно так» звучат задачи из этой серии….

Доска Гальтона (как в материальном, так и в виртуальном виде) при высокой точности изготовления (а умельцев, слава богу, во все времена хватало) демонстрирует «НОРМАЛЬНОЕ РАСПРЕДЕЛЕНИЕ» во всей его красе. Мы не знаем, как будет вести себя любой отдельный шар, но мы знаем, как будет себя вести «большое множество шаров».

Если взять тысячу шаров, то лишь единичные из них отклонятся от своей первоначальной траектории настолько, что попадут в боковые отсеки (полюса). Большая же часть ляжет в центральные карманы. Если один колышек сбивал их вправо, следующий направлял влево и так далее. Это явление называется «нормальным распределением» и широко используется в теории вероятностей.

Нормальное распределение – это такой же мощный закон, как, допустим, гравитационное притяжение. Даже наша жизнь очень напоминает доску Гальтона. Черная полоса в жизни, как правило, сменяется белой. Человека качает из стороны в сторону, но бьет не до смерти. Отдельные личности, конечно, становятся маргиналами-бомжами или, напротив, миллионерами. Но, сами знаете, большинство из нас, поободрав бока о житейские «препятствия», рано или поздно останавливаются в умеренной зоне (т.е. вдали от полюсов).

Ну, «теории» достаточно… Пора дробить поставленную задачу на части…

Раз на экране должны двигаться шары – значит не обойтись без мультипликации.
Раз будет мультипликация, значит, будут сменяющие друг друга, кадры.
Каждый очередной кадр должен показать шары с их новыми координатами (чуть ниже предыдущего местоположения, а правее или левее, как бог-случай даст).
Понятно, что воронка, упоры и стаканы, на всех кадрах – это МОНУМЕНТЫ. Поэтому их целесообразно поместить на отдельный bipmap, а каждый кадр получать, изображая нужные шары на копии этого фонового рисунка.

Сколько в воронке шаров я показываю только числом. Сколько шаров в каждом стакане – цифрами и пропорциональной величины прямоугольником красного цвета. А вот все движущиеся шары нужно прорисовывать конкретно.

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


на C++ Builder 6.0
на Delphi 7






Условия получения кода?    Показать?


Другие примеры на тему «Математические методы компьютерной 2D 3D графики»

Другие примеры на тему «Компьютерные игры (учебные, простенькие)»

Другие примеры на языках «C»,«C++»,«C#»

Другие примеры на языке «Delphi»

Другие примеры на языке «Visual Basic»

Есть очень похожие по интерфейсу (на Delphi_7 exe) готовые проекты
на C++ и на Visual Basic 6.0




Если на этой странице не нашлось того, что Вы так искали...

         Не расстраивайтесь, не все потеряно... Смело щелкайте...

исходный код на заказ. orenstudent.ru Автоматизация документов MS Office. orenstudent.ru исходный код на заказ. orenstudent.ru Помогите найти и устранить ошибку в исходном коде программы. orenstudent.ru Skype-консультирование по программированию
Скайп-консультации

Акция !!!
Весь код по 49 руб


требуются
школьники!


и СТУДЕНТЫ!
Кому не плевать
на деньги!
Сайт помощи студентам по программированию и информатике