За последние 24 часа нас посетили 18125 программистов и 1600 роботов. Сейчас ищут 996 программистов ...

Интересная задачка - эмуляция среды и объектов в ней.

Тема в разделе "Прочее", создана пользователем Psih, 26 янв 2010.

  1. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    В связи с изучением ООП учениками, решили помимо стандартных практических задачь занятся и одной необычной задачкой. Предлагаю вам тоже попробовать свои силы в ней, мне интересно, кто лучше справится - вы или студенты :)

    Задачка следующая:

    Есть объект среды.
    В среду можно поставить объекты разного вида (машины, самолёты, вертолёты), которые по этой среде могут перемешатся в произвольных направлениях. Соотвественно каждый из объектов имеет определённые свойства: максимальную скорость, расход топлива на единицу расстояния, запас топлива. Объекты, оказавшиеся в одной и той же координате по всем трём плоскостям считаются столкнувшимися, т.е. происходит авария. Авария влияет на поведение только столкнувшихся объектов, остальная среда живёт дальше.
    Расчёты движения происходят с заданным шагом, т.е. это не расчёт движения от и до, а расчёты с определённым, достаточно малым, временным интервалом.

    Вот такая вот задачка :)
     
  2. А я ж делал как то. Правда на яваскрипте ) И двухмерный )))
     
  3. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Омг, и что в данной задаче сделать надо? :)
     
  4. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Simpliest
    Эмулировать среду :)
     
  5. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Psih
    и сколько времени должны все продержаться? какие требования к среде? не понятна задача до конца.
     
  6. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ответ - никак, потому что делать реалтайм на пхп бред =)
    но если очень надо
    не знаю нах тут ООП...
    PHP:
    1. <?
    2. $units=array(
    3. array("name"=>"bmw","x"=>true,"y"=>true,"z"=>false,"mspeed"=>200,"dfuel"=>5,"fuel"=>120),
    4. array("name"=>"la-5f","x"=>true,"y"=>true,"z"=>true,"mspeed"=>600,"dfuel"=>10,"fuel"=>800),
    5. array("name"=>"il-2","x"=>true,"y"=>true,"z"=>true,"mspeed"=>400,"dfuel"=>20,"fuel"=>3500),
    6. array("name"=>"oka","x"=>true,"y"=>true,"z"=>false,"mspeed"=>100,"dfuel"=>1,"fuel"=>70),
    7. );
    8.  
    9. $map=array();
    10. for($i=0;$i<100;$i++){
    11.     if(empty($units)) break;
    12.     foreach($units as $k=>$unit){
    13.         if($unit['fuel']>0){
    14.            $g=round(rand(1,$unit['mspeed'])/3);
    15.            if(!isset($map[$k])) $map[$k]=array(rand(-10,10),rand(-10,10),rand(-10,10));
    16.            if($unit['x']){
    17.                if(!isset($map[$k][0])) $map[$k][0]=0;
    18.                $map[$k][0]+=rand(0,1)?-$g:$g;
    19.            }
    20.            if($unit['y']){
    21.                if(!isset($map[$k][1])) $map[$k][1]=0;
    22.                $map[$k][2]+=rand(0,1)?-$g:$g;
    23.            }
    24.            if($unit['z']){
    25.                if(!isset($map[$k][2])) $map[$k][2]=0;
    26.                $map[$k][2]+=rand(0,1)?-$g:$g;
    27.            }
    28.            print "Unit ".$unit['name']." move to (".implode(",",$map[$k]).")<br>";
    29.            if($unit['z']){
    30.                 if($map[$k][2]<=0) {
    31.                    print "Unit type air ".$unit['name']." dead on ground<br>";
    32.                    unset($units[$k]);
    33.                }
    34.            }
    35.            $units[$k]['fuel']-=$g/$unit['dfuel'];
    36.            if(count($zkey=array_keys($map,$map[$k]))>=2){
    37.                print "Units ";
    38.                for($z=0,$zc=count($zkey);$z<$zc;$z++){
    39.                    print $units[$zkey[$z]]['name'].", ";
    40.                    unset($units[$zkey[$z]]);
    41.                }
    42.                print "was crashed<br>";
    43.            }
    44.         }else{
    45.             print "Unit ".$unit['name']." was stopped<br>";
    46.             unset($units[$k]);
    47.         }
    48.     }
    49.     print "<hr>";
    50. }
    51.  
    52.  
    53. print "<pre>";
    54. print "Result units\r\n\r\n";
    55. print_r($units);
    56. print "</pre>";
    57. ?>
     
  7. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Mr.M.I.T.
    Отлаживай :)

     
  8. ниче не бред. При наличии прямых рук, пхп в консоли охуеннен.
    Бред - делать реалтайм в HTTP. А Пхп тут не при чем.
     
  9. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    флоппик
    не ну я согласен =) но в консоли есть Си например, зачем пхп.
    Simpliest
    ну ладно уж одну строчку то =)
    писалось на коленке
    хы
     
  10. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    ;) дык, куда еще класть ваш код? :D
     
  11. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Задача в изучении PHP, используя большую часть того, что предлагает PHP - интерфейсы, абстрактные классы, тайпхинтинг.

    Костян

    Продержатся до окончания движения всех объектов. Т.е. в принципе нету ограничения на время или кол-во действий. Все объекты обрабатываются независимо и живут сами по себе, а среда отвечает за их передвижение и проверку коллизий.

    Ограничений на сложность реализации мы себе не ставим, т.е. к примеру мы дойдём до того, что у нас есть десяток разных самолётов, они могут стрелять и убивать других :) Среда может быть не ровной поверхностью, а движение может задаваться формулами и не быть строго прямолинейным от координат А в координаты Б.

    Чётких требований нету, потому что это задача на сотворение, а не на реализацию задания расписанного от А до Я. Я дал студентам идею и буду их направлять. А что они уже придумают, это их дело :)
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Psih
    надеюсь ты не забыл им объяснить что нужно использовать если оно НУЖНО? =)

    это у тебя уже не задача а целая система, тут докуя так накодить можно, было бы время и желание.
     
  13. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Mr.M.I.T.
    Ну так вот они к пятнице составляют план работы. И будем по шагам делать, постепенно усложняя систему. Т.е. сперва сделать среду и объект и собственно их поставить в среду. Потом заставить двигатся в произвольном направлении. Потом заставить их сталкиватся. И.т.д., т.е. по нарастающей.
     
  14. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Psih
    а, я понял, тебе просто нужна мат модель и писец? это меня флоппик запутал со своей JS и визуализацией, я не понял как "щупается" твоя среда.
     
  15. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    ну не мешало бы установить явно критерии до куда планируется усложнять. А то мысленно то можно до бесконечности усложнять, а на самом то деле всё не такое гибкое получаться может.
     
  16. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Костян
    Там видно будет. Это же для учёбы. Будет что-то криво - переделаем. В конце концов им нужно почувствовать что такое код, лопатить его бульдозерами :)
     
  17. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    а чё задачу какую выбрал? нежизненную...
     
  18. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Mr.M.I.T.
    классная задача. А то понаделывают дискременатнов и всякой фигни студентам, аж тошнит.
     
  19. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    да причём тут.
    сайты бы писали, движки, АПИ и пр.

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

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Mr.M.I.T.
    вот если они поймут то что ты сказал это уже хорошо
     
  21. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Mr.M.I.T.
    Это дополнительное задание, помимо классического написания прикладного кода. Они ещё только начинают серьёзно что-то писать, а ООП на полную катушку использовать для построения простых блогов, галерей и прочей мелочёвки глупо и подавать дурной пример. Инструментарий должен соответствовать задаче. Так что задачка, описанная в топике - это для тренировки ООП навыков. Чисто прикладные вещи придут позже.

    Ну так делать то будут они. Решать как делать тоже будут они. Сами же будут себе набивать шишки. Я буду им просто помогать разобраться что к чему.
     
  22. Alost

    Alost Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    335
    Симпатии:
    0
    Адрес:
    Город вокруг невы
    Интересная задача.
    Каждый холит и лелет свою программу, сегодня это процедурная штука,а после нескольких рефакторингов, маленький мир который ты создал.
     
  23. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    а размеры объектов учитываются? или они представляются чисто точками в прострастве?
    а пространство дискретное?
    если использовать дифференциальное исчисление, то задача еще круче и сложнее получится.
     
  24. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    engager
    эс равно вэ на тэ. Больше тут ничего не надо.
     
  25. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    не, фигня какая-то. вэ должна быть вектором, чтоб определить угрозу столкновения.