<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92104</guid>
        <pubDate>Wed, 26 Mar 2003 14:39:02 +0000</pubDate>
        <title>Просчет столкновений</title>
        <link>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92104</link>
        <description><![CDATA[Sulako: Да биллиард только для примера, меня вообще интересовал сам принцип обработки на больших скоростях... <br>просто на моем биллиарде это было заметно...ну да вот оно - http://sulako-v.narod.ru/games/pool.htm Шарики залезают друг в друга, и приходится их отпихивать обратно...теперь попробую сделать по новому принципу...<br>Вращение делать я не собирался... реалистичное сделать и правда очень трудно, но для игры, по-моему, можно было бы просто делать поправку при движении на вращение...ну и передавать вращение при столкновениях...]]></description>
        <author>Sulako</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92103</guid>
        <pubDate>Wed, 26 Mar 2003 08:10:29 +0000</pubDate>
        <title>Просчет столкновений</title>
        <link>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92103</link>
        <description><![CDATA[Adil: Не за что. Честно говоря, меня заинтересовало, каков реализм твоего бильярда? Собираешся ли ты учитывать вращение шаров и, если да, то как? Ведь, ИМХО, это очень сложно...]]></description>
        <author>Adil</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92102</guid>
        <pubDate>Tue, 25 Mar 2003 15:39:40 +0000</pubDate>
        <title>Просчет столкновений</title>
        <link>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92102</link>
        <description><![CDATA[Sulako: Точно! как же я сам не понял... если второй шар не движется, то все отлично получается... значит, и надо считать его неподвижным ;) а я уже собрался дифуры решать...<br>Большой сенкс!]]></description>
        <author>Sulako</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92101</guid>
        <pubDate>Tue, 25 Mar 2003 15:21:56 +0000</pubDate>
        <title>Просчет столкновений</title>
        <link>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92101</link>
        <description><![CDATA[Adil: Нельзя здесь проводить итерации по времени - можно пролететь.<br>Надо искать наиближайшее по времени столкновение, перебирая все возможные пресечения &quot;движущийся шар - любой другой шар&quot;. &nbsp;Удобно делать это, переходя в Систему Отсчета этого движущегося шара. Тогда для нахождения пересечения надо просто найти(если есть) точки пересечения 2 прямых и окружности (или сферы? ;)), пересчитать время, через которое будет столкновение (если будет) и так перебрать все остальные шары для одного движушегося шара. Затем взять следующий движушийся и т.д. Найти минимальное время до удара, пересчитать новые скорости и координаты и делать следующую итерацию.<br><br><br>З.Ы. Про бортики не забудь!!! ;D]]></description>
        <author>Adil</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92100</guid>
        <pubDate>Tue, 25 Mar 2003 14:41:23 +0000</pubDate>
        <title>Просчет столкновений</title>
        <link>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92100</link>
        <description><![CDATA[wormball: 2S.Yu.Gubanov<br><br>да не. задача многих тел - это когда у тебя много дифуров. сдесь же я предлагаю просто вычислить точку пересечения 2х прямых с учётом того, что по ним движутся шарики. щас мне лень тут всё расписывать.]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92099</guid>
        <pubDate>Tue, 25 Mar 2003 14:40:51 +0000</pubDate>
        <title>Просчет столкновений</title>
        <link>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92099</link>
        <description><![CDATA[Demo_S: нужно две структуры данных. одна хранит инфу о текущем положении. потом вторую заполняем положениями шариков после одной итерации. <br>потом для каджого шарика проверяем на столкновение с другим шариком. <br>ты это делал просто сравнивая растояния между центрами.<br>а теперь нужно сравнить положения одного шарика до и после шага с линией, проведенной через положения другого шарика до и после шага.<br><br>если до шага первый шарик находился под линией,а после шага находится над линией - то столкнулись, иначе нет...<br><br>сложность по любому o(n<sup class='tag-sup'>2</sup>)]]></description>
        <author>Demo_S</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92098</guid>
        <pubDate>Tue, 25 Mar 2003 13:59:56 +0000</pubDate>
        <title>Просчет столкновений</title>
        <link>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92098</link>
        <description><![CDATA[S.Yu.Gubanov: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>wormball, 25.03.03, 16:25:12</span><div class='quote '>это делается по-другому. надо расписать механические уравнения движения и найти точку пересечения траекторий и траектории шаров после столкновения. таким способом шары будут сталкиваться даже тогда, когда они не пересекаются на текущем шаге.</div></div><br>То есть ты предлагаешь решить задачу многих тел аналитически?<br>]]></description>
        <author>S.Yu.Gubanov</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92097</guid>
        <pubDate>Tue, 25 Mar 2003 13:25:12 +0000</pubDate>
        <title>Просчет столкновений</title>
        <link>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92097</link>
        <description><![CDATA[wormball: это делается по-другому. надо расписать механические уравнения движения и найти точку пересечения траекторий и траектории шаров после столкновения. таким способом шары будут сталкиваться даже тогда, когда они не пересекаются на текущем шаге.]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92096</guid>
        <pubDate>Mon, 24 Mar 2003 08:02:39 +0000</pubDate>
        <title>Просчет столкновений</title>
        <link>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92096</link>
        <description><![CDATA[S.Yu.Gubanov: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Sulako, 24.03.03, 03:57:43</span><div class='quote '><br>...<br>Увеличить частоту итераций, разумеется, не выход, так как до бесконечности ее увеличить нельзя.<br>...<br></div></div><br>Законы физики еще ни кому не удавалось нарушить.<br>Хочешь увеличивать скорость - увеличивай количество иттераций.<br>На счет бесконечности - это перегиб, скорость шаров до бесконечности тоже <br>поднять не удасться.<br><br>Должно быть:<br><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;br&#62;V_max*dt &#60;&#60; R&#60;br&#62;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>и точка.<br><br>В твоих руках разве что только есть возможность динамически отслеживать V_max и, соответственно, регулировать шаг по времени, например, по формуле<br><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;br&#62;procedure КоррекцияШагаПоВремениdt();&#60;br&#62;begin&#60;br&#62; &nbsp;dt := 0.01*R / V_max;&#60;br&#62; &nbsp;if dt &#62; 0.01*base_time_interval then dt := 0.01*base_time_interval;&#60;br&#62;end;&#60;br&#62;</div></ol></div></div></div></div><br><br>Тогда самый простой вариант &quot;одного шага&quot; по времени на интервал = base_time_interval будет таким<br><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;br&#62;t := 0;&#60;br&#62;while t &#60; base_time_interval do begin&#60;br&#62; &nbsp;НахождениеМаксимальнойСкорости();&#60;br&#62; &nbsp;КоррекцияШагаПоВремениdt(); &nbsp;&#60;br&#62; &nbsp;ДвижениеШаровНаВремя(dt);&#60;br&#62; &nbsp;t := t + dt;&#60;br&#62;end;&#60;br&#62;</div></ol></div></div></div></div><br><br>Так что когда есть быстро движущиеся шары - вычислений много, когда нет - мало.]]></description>
        <author>S.Yu.Gubanov</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92095</guid>
        <pubDate>Mon, 24 Mar 2003 05:06:46 +0000</pubDate>
        <title>Просчет столкновений</title>
        <link>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92095</link>
        <description><![CDATA[Shiru_Otaku: Аналогичную проблему мы с коллегой ;) решали так: уменьшали в, скажем, 10 раз скорость движения обьектов, и просчитывали вместо одной итерации 10 подряд... Но это действительно не выход, если верхний предел суммы скоростей обьектов неограничен (у нас был один подвижный обьект относительно одного неподвижного)...<br><br>Раз у тебя пример с биллиардом - http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=algorithm;action=display;num=1042787730;start=0 - там был пример реализации, шарики друг сквозь друга не пролетали:)]]></description>
        <author>Shiru_Otaku</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92094</guid>
        <pubDate>Mon, 24 Mar 2003 00:57:43 +0000</pubDate>
        <title>Просчет столкновений</title>
        <link>https://forum.sources.ru/index.php?showtopic=9484&amp;view=findpost&amp;p=92094</link>
        <description><![CDATA[Sulako: Допустим, есть биллиардный стол с шариками. У каждого шарика есть его положение,и вектор скорости. В цикле меняем положение шариков по векторам скоростей - получаем движение. Для обработки столкновений момент столкновения определяем по расстоянию от центров 2 шариков - если оно меньше диаметра шарика, значит, столкнулись. <br>Пока шарики движутся медленно, все прекрасно - катаются, сталкиваются. Но! Теперь увеличим их скорость так, чтобы длина вектора скорости оказалась больше диаметра шарика. В результате возможна такая ситуация - в одной итерации цикла быстро движущийся шарик находится перед другим, а в следующей - уже за ним, то есть шарики пролетели друг через друга!<br>Так вот, хотелось бы знать - существует ли способ правильно просчитать момент столкновения на больших скоростях?<br>Увеличить частоту итераций, разумеется, не выход, так как до бесконечности ее увеличить нельзя.<br>Можно проводить линию из точек положения шарика между текущей и предыдущей итерациями и проверять, находится ли на ней другой шарик. Но это годится, только если этот второй шарик неподвижен. Если же он тоже быстро движется, причем под углом к направлению первого, ничего не определить.<br>Возможно, неверен сам способ задания шариков и их движения - но тогда как их задавать правильно?]]></description>
        <author>Sulako</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	