| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Консольное приложение |
| Автор: naumann 21.12.2011, 07:42 |
| Это требование предъявляемые к программе...я не прошу делать за меня... просто подскажите опытным советом, в какую сторону думать ... Заранее большое спасибо=) Приложение моделирует спринтерский заезд двух автомобилей... на 402 метра, каждую секунду в консоль нужно выводить: - Имя водителя; - Текущую скорость; - Пройденное расстояние; Автомобили стартуют одновременно... по достижению финиша автомобиль останавливается, когда оба авто пересекают финиш... выводиться итоговое время и занятое место ... Программа моделирует несколько заездов разных авто... |
| Автор: lazycat 21.12.2011, 12:55 |
| IMHO проще всего будет сделать многопоточную программу: один поток - "трасса", контроль за автомобилями, вывод необходимых данных на консоль и т.д. и по одному потоку на каждый автомобиль. Ну а при моделировании автомобиля - полная свобода фантазии. Можно учитывать / не учитывать инерцию, можно отслеживать / не отслеживать ряд, в котором едет машина, факт, что дорогу заслоняет другой автомобиль и т.д. В простейшем случае - каждому автомобилю рандомную скорость и вперед. Успехов. |
| Автор: DeadlyAngel 22.12.2011, 06:21 |
| в <epam> чтоkли поступаешь))))???? |
| Автор: _Y_ 22.12.2011, 10:10 |
Странное условие. О http://ru.wikipedia.org/wiki/%D0%93%D0%B0%D1%81%D1%82%D0%BE%D0%BD_%D0%B4%D0%B5_%D0%A8%D0%B0%D1%81%D0%BB%D1%83-%D0%9B%D0%BE%D0%B1%D0%B0 речь идет? На современнях-то скоростях мало что увидишь при частоте вывода один раз в секунду Думаю, все можно сделать очень просто. Трасса моделируется прямой (какими трассы драгстеров и являются), два автомобиля ускоряются по законам физики 7-го класса. Что еще надо при частоте-то вывода 1 раз в секунду. Но если по уму, то как сказал lazycat, программу лучше делать многопоточной. Тогда можно будет делать и с большей частотой и автомобили добавлять и другие фичи без боязни, что пользовательский интерфейс зависать будет. Но не думаю, что так уж обязательно моделировать все по отдельности. Для начала два потока - рассчет положения автомобилей на трассе и показ результатов пользователям. Как это осуществить? - Так же как как делаются прогресс бары. Вот хотя бы http://forum.vingrad.ru/index.php?showtopic=343406&view=findpost&p=2436549. |
| Автор: naumann 22.12.2011, 20:18 | ||
да хотел=)... Спасибо ребят за советы=)... |
| Автор: naumann 22.12.2011, 21:05 |
| ... в каждого из авто есть свойство ускорение и максимальная скорость. Взял формулы для определения текущей скорости: v = a*t, где a-ускорение, t-время и пройденного пути: s=v*t, где v-текущая скорость, t-время ... ммм... как лучше засечь время (если так можно выразиться) при старте авто, чтобы его можно было подставлять в формулу... просто сделать счетчик? или?... |
| Автор: _Y_ 23.12.2011, 10:12 |
| naumann, для начала разгона формулы v = a*t и s=a*t^2/2, конечно, годятся. Но по уму они применимы только к сферическому коню в вакууме, поскольку подразумевают неограниченную максимальную скорость автомобиля. На самом же деле нужно учитывать, что сопротивление его движению растет со скоростью. При этом мощность двигателя в идеале просто псостоянна. Реалный случай описать довольно сложно: 1. Сопротивление качению растет со скоростью - формулу не знаю. 2. Аэродинамическое сопротивление растет пропрорционально квадрату скорости. 3. Мощность двигателя звисит от его оборотов и проходит через максимум. Кривая довольно сложная. 4. Обороты двигателя связаны с выбранной передачей трансмиссии. Передачи же за время разгона переключаются. Но это уже полный офф. Врядли стоит задача описания объективной реальности. Я бы просто взял для скорости формулу кривой с насыщением. Что-то вроде v = max*t/(d+t). У этой формулы начальный участок близок к линейной зависимости, а потом наступает насыщение при приближении к максимальной скорости max. И еще. Не делайте инкрементальное увеличение скорости и/или пройденного пути. Это очень распространенная ошибка. В каждом цикле считайте скорость и путь по одной и той же формуле; т.е. от старта. |
| Автор: naumann 24.12.2011, 16:49 |
| ... Еще раз спасибо за Ваши ответы, но еще вопрос если позволите... Пусть у меня есть коллекция машин-участниц ArrayList<Car> cars; Нужно задать последовательность заездов всех элементов(машин) этой коллекции т.е. берем 0 и 1 элемент(1 и 2 машину из коллекции) они соревнуются между собой... потом возвращаемся в коллекцию берем 2 и 3 элемент(3 и 4 машину)... и т.д... как лучше пройти коллекцию?! |
| Автор: _Y_ 27.12.2011, 11:19 | ||
В простейшем варианте - последоовательный проход:
Но вариант этот не очень хорош, т.к. машинка с i=0 должна гоняться во всех начальных заездах подряд. В реальных соревнованиях каждый участник должен получить перерывы более-менее одинаковые. Поэтому в вышенаписанном цикле лучше просто собрать коллекцию пар участников, потом отсортировать эту коллекцию так, чтобы между заездами у каждой машинки были паузы. Сделать это можно, видимо, по-разному. Но как это делается по-уму не скажу. Здесь мой многолетний опыт участия в гонках Фомулы-1 (в качестве телезртеля) бесполезен, т.к. в моей формуле машинки стартуют всем кагалом. Можно постомтреть на спортивных вебсайтах как формируются старты в спидвее (ледовые и гаревые гонки на мотоциклах). Там тот принцип, что Вам нужен, но стартуют четверками. Или уж искать про сами драгстеры (вообще Ваш случай). |
| Автор: naumann 27.12.2011, 12:00 | ||||
=)спасибо ... |