Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Консольное приложение, Вывод данных по автомобилям и заездам 
:(
    Опции темы
naumann
Дата 21.12.2011, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 21.12.2011

Репутация: нет
Всего: нет



Это требование предъявляемые к программе...я не прошу делать за меня... просто подскажите опытным советом, в какую сторону думать ... Заранее большое спасибо=)

Приложение моделирует спринтерский заезд двух автомобилей... на 402 метра, каждую секунду в консоль нужно выводить:
- Имя водителя;
- Текущую скорость;
- Пройденное расстояние;
Автомобили стартуют одновременно... по достижению финиша автомобиль останавливается, когда оба авто пересекают финиш... выводиться итоговое время и занятое место ... Программа моделирует несколько заездов разных авто... 

Это сообщение отредактировал(а) naumann - 21.12.2011, 12:38
PM MAIL   Вверх
lazycat
Дата 21.12.2011, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 15.7.2007

Репутация: 1
Всего: 1



IMHO проще всего будет сделать многопоточную программу: один поток - "трасса", контроль за автомобилями, вывод необходимых данных на консоль и т.д. и по одному потоку на каждый автомобиль. 

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

Успехов.

PM MAIL   Вверх
DeadlyAngel
Дата 22.12.2011, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 13.3.2010

Репутация: нет
Всего: нет



в <epam> чтоkли поступаешь))))???? smile 

Это сообщение отредактировал(а) DeadlyAngel - 22.12.2011, 06:21
PM MAIL   Вверх
_Y_
Дата 22.12.2011, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Цитата(naumann @  21.12.2011,  07:42 Найти цитируемый пост)
402 метра, каждую секунду в консоль нужно выводить

Странное условие. О рекорде скорости 1898 года речь идет? На современнях-то скоростях мало что увидишь при частоте вывода один раз в секунду  smile 

Думаю, все можно сделать очень просто. Трасса моделируется прямой (какими трассы драгстеров и являются), два автомобиля ускоряются по законам физики 7-го класса. Что еще надо при частоте-то вывода 1 раз в секунду.

Но если по уму, то как сказал lazycat, программу лучше делать многопоточной. Тогда можно будет делать и с большей частотой и автомобили добавлять и другие фичи без боязни, что пользовательский интерфейс зависать будет. Но не думаю, что так уж обязательно моделировать все по отдельности. Для начала два потока - рассчет положения автомобилей на трассе и показ результатов пользователям.

Как это осуществить? - Так же как как делаются прогресс бары. Вот хотя бы только что обсуждали.



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
naumann
Дата 22.12.2011, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 21.12.2011

Репутация: нет
Всего: нет



Цитата(DeadlyAngel @ 22.12.2011,  06:21)
в <epam> чтоkли поступаешь))))???? smile


да хотел=)... 

Спасибо ребят за советы=)...
PM MAIL   Вверх
naumann
Дата 22.12.2011, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 21.12.2011

Репутация: нет
Всего: нет



... в каждого из авто есть свойство ускорение и максимальная скорость. Взял формулы для определения текущей скорости: 
    v = a*t, где a-ускорение, t-время и пройденного пути: s=v*t, где v-текущая скорость, t-время ... ммм... как лучше засечь время (если так можно выразиться) при старте авто, чтобы его можно было подставлять в формулу... просто сделать счетчик? или?... smile 
PM MAIL   Вверх
Mirkes
Дата 23.12.2011, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Цитата(naumann @  22.12.2011,  21:05 Найти цитируемый пост)
... в каждого из авто есть свойство ускорение и максимальная скорость. Взял формулы для определения текущей скорости:     v = a*t, где a-ускорение, t-время и пройденного пути: s=v*t, где v-текущая скорость, t-время ... ммм... как лучше засечь время (если так можно выразиться) при старте авто, чтобы его можно было подставлять в формулу... просто сделать счетчик? или?...   


Вообще говоря пройденный путь считается не так. он равен s=a*t^2/2.
Время считается с момента старта, посему просто считать секундами, например. Если нужна большая точность - то с более мелким шагом.


--------------------
Mirkes
PM MAIL   Вверх
_Y_
Дата 23.12.2011, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



naumann, для начала разгона формулы v = a*t и s=a*t^2/2, конечно, годятся. Но по уму они применимы только к сферическому коню в вакууме, поскольку подразумевают неограниченную максимальную скорость автомобиля. На самом же деле нужно учитывать, что сопротивление его движению растет со скоростью. При этом мощность двигателя в идеале просто псостоянна.

Реалный случай описать довольно сложно:
1. Сопротивление качению растет со скоростью - формулу не знаю.
2. Аэродинамическое сопротивление растет пропрорционально квадрату скорости.
3. Мощность двигателя звисит от его оборотов и проходит через максимум. Кривая довольно сложная.
4. Обороты двигателя связаны с выбранной передачей трансмиссии. Передачи же за время разгона переключаются.

Но это уже полный офф. Врядли стоит задача описания объективной реальности. Я бы просто взял для скорости формулу кривой с насыщением. Что-то вроде v = max*t/(d+t).

У этой формулы начальный участок близок к линейной зависимости, а потом наступает насыщение при приближении к максимальной скорости max.

И еще. Не делайте инкрементальное увеличение скорости и/или пройденного пути. Это очень распространенная ошибка. В каждом цикле считайте скорость и путь по одной и той же формуле; т.е. от старта.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
naumann
Дата 24.12.2011, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 21.12.2011

Репутация: нет
Всего: нет



... Еще раз спасибо за Ваши ответы, но еще вопрос если позволите...
    Пусть у меня есть коллекция машин-участниц ArrayList<Car> cars; Нужно задать последовательность заездов всех элементов(машин) этой коллекции т.е. берем 0 и 1 элемент(1 и 2 машину из коллекции) они соревнуются между собой... потом возвращаемся в коллекцию берем 2 и 3 элемент(3 и 4 машину)... и т.д... как лучше пройти коллекцию?! smile  smile 

Это сообщение отредактировал(а) naumann - 24.12.2011, 16:55
PM MAIL   Вверх
_Y_
Дата 27.12.2011, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



В простейшем варианте - последоовательный проход:
Код

for(int i = 0; i < cars.size(); i++){
   for(int j = i+1; j < cars.size(); j++){
        //Здесь код вызова соревнования между машинками i и j 
   }  
}

Но вариант этот не очень хорош, т.к. машинка с i=0 должна гоняться во всех начальных заездах подряд. В реальных соревнованиях каждый участник должен получить перерывы более-менее одинаковые. Поэтому в вышенаписанном цикле лучше просто собрать коллекцию пар участников, потом отсортировать эту коллекцию так, чтобы между заездами у каждой машинки были паузы.

Сделать это можно, видимо, по-разному. Но как это делается по-уму не скажу. Здесь мой многолетний опыт участия в гонках Фомулы-1 (в качестве телезртеля) бесполезен, т.к. в моей формуле машинки стартуют всем кагалом. Можно постомтреть на спортивных вебсайтах как формируются старты в спидвее (ледовые и гаревые гонки на мотоциклах). Там тот принцип, что Вам нужен, но стартуют четверками. Или уж искать про сами драгстеры (вообще Ваш случай).


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
naumann
Дата 27.12.2011, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 21.12.2011

Репутация: нет
Всего: нет



Цитата(_Y_ @ 27.12.2011,  11:19)
В простейшем варианте - последоовательный проход:
Код

for(int i = 0; i < cars.size(); i++){
   for(int j = i+1; j < cars.size(); j++){
        //Здесь код вызова соревнования между машинками i и j 
   }  
}

Но вариант этот не очень хорош, т.к. машинка с i=0 должна гоняться во всех начальных заездах подряд. В реальных соревнованиях каждый участник должен получить перерывы более-менее одинаковые. Поэтому в вышенаписанном цикле лучше просто собрать коллекцию пар участников, потом отсортировать эту коллекцию так, чтобы между заездами у каждой машинки были паузы.

Сделать это можно, видимо, по-разному. Но как это делается по-уму не скажу. Здесь мой многолетний опыт участия в гонках Фомулы-1 (в качестве телезртеля) бесполезен, т.к. в моей формуле машинки стартуют всем кагалом. Можно постомтреть на спортивных вебсайтах как формируются старты в спидвее (ледовые и гаревые гонки на мотоциклах). Там тот принцип, что Вам нужен, но стартуют четверками. Или уж искать про сами драгстеры (вообще Ваш случай).

=)спасибо ... 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1329 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.