Civilization и Total War

 

Имя
Пароль  
Забыли пароль?
Регистрация


CIVru.com / "Совет по концепции" - "Мозговой штурм" / Обсуждение модели непрерывного пространства-времени
Версия для печати . Вверх
Автор Сообщение
Ктулху
Участник


Репутация: 888(???)
# Дата: 5 Фев 2010 01:14:54 Поправил: Ктулху Цитата

Deimon:На большинстве таких точек возможно создание Города.
именно и только в этих точках? немного левее нельзя? нипанятна!

Deimon:Близлежащие Узловые точки соединяются Путями.
насильственно? грузопоток или/и пассажиропоток учитывается? от одной точки до любой другой, с первой не совпадающей, можно провести континуум путей. посему, я полагаю, что Путь будет создан один, с наименьшим расстоянием. так?

Deimon:Таким образом, задается граф возможного перемещения Юнитов
граф - это хорошо! тока я не понял каким образом непрерывное пространство превращается в набор точек и как эти точки соединяются и эти связи превращются к граф.

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

приведу пример карты Европы:
карта Европы разбивается на области(страны). каждая страна уже разбита за нас, на области, т.д.
т.е. если кому-либо надо добратся из Парижа в Москву, то алгоритм будет приблизительно такой: обходим граф стран с целью создания пути в Россию. путь найден! по нему следует дуть в Германию. спускаемся в граф областей и пытаемся найти путь из Парижа в ближащую область Германии (предположим, что граничащие области соседних стран есть в графе областей страны(в данном случае граф областей Франции)). ура нашли! двигаемся. поднимаемяся на вверх и смотрим в какую страну надо после Германии. спускаемся в граф областей Германии и пытаемся найти путь до любой области, следующей по списку, страны.
пути нет! почему!? а потому что пора спать!

Deimon:Пока происходит Переход Юнит блокирует использование данного Перехода для других Юнитов.
имхо любое динамическое блокирование черевато геморроем с поиском пути. изначально от таких идей стоит отказатся.

Yorick:С одной стороны задержку инфы действительно непросто внедрить, с другой - это мы как и в Циве будем в самые ранние эпохи знать ВСЕ ОБО ВСЕХ самых дальних триремах?
если поставить поддержку юнитов в зависимость от расстояния, то данная проблема исчезнет. карты станут более ценными, т.д.

Yorick:И как-то в чем-то приходится поддержать Аку - не совсем понятны фразы типа "Мир состоит из Суши и Моря, разделенных Побережьем." Мир - это что? шар, цилиндр, прямоугольник, "не важно"?
не важно. важно то, что постранство и время непрерывно. т.е. мир безклеточный.

Yorick:Суша-море - клетки, узлы, вообще абстракция?
тут я сам не понял, ибо если пространство непрерывно, то имеет смысл говорить об [выпухлых] областях вместо узловых точек. далее не ясно, будут ли реки иметь ширину, или они будут обозначатся некими ломанными линиями.

кстати этот форум поддерживает что-либо по смыслу [spoil]? чтобы мона было часть длинных постов или кода скрывать?

Deimon
Кибердемон



Репутация: 1288(600)
# Дата: 5 Фев 2010 07:59:17 Поправил: Администратор Цитата

Ктулху:именно и только в этих точках? немного левее нельзя? нипанятна!
Я придерживаюсь того, что города возникают во вполне определенных точках, наиболее выгодных для размещения города. И "немного левее" город ставить просто бессмысленно - та точка по определению хуже этой. В принципе ничего в реализации модели не мешает дать возможность создавать города в произвольной точке ребра. Но такое местоположение явно хуже чем местоположение на узловой точке, кроме того возникнет желание проложить новые пути из города, что сделает его новой узловой точкой. В итоге существенно усложняется реализация.
Ктулху:насильственно? грузопоток или/и пассажиропоток учитывается? от одной точки до любой другой, с первой не совпадающей, можно провести континуум путей. посему, я полагаю, что Путь будет создан один, с наименьшим расстоянием. так?
С наименьшим, ээээ, как бы это сказать, транспортным сопротивлением. То есть кратчайший путь может идти через горы. И между двумя точками может быть несколько Путей: Deimon:Пара точек может быть соединена несколькими Путями: например Речным по Реке и двумя Сухопутными по берегам Реки.

Ктулху:граф - это хорошо! тока я не понял каким образом непрерывное пространство превращается в набор точек и как эти точки соединяются и эти связи превращются к граф.

Путем произвола автора карты =)

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

О случайных картах я сейчас даже не думаю. Карта создается в редакторе руками. Насколько это будет трудоемко и насколько это можно автоматизировать - будет видно потом.

Ктулху:приведу пример карты Европы:
карта Европы разбивается на области(страны). каждая страна уже разбита за нас, на области, т.д.
т.е. если кому-либо надо добратся из Парижа в Москву, то алгоритм будет приблизительно такой: обходим граф стран с целью создания пути в Россию. путь найден! по нему следует дуть в Германию. спускаемся в граф областей и пытаемся найти путь из Парижа в ближащую область Германии (предположим, что граничащие области соседних стран есть в графе областей страны(в данном случае граф областей Франции)). ура нашли! двигаемся. поднимаемяся на вверх и смотрим в какую страну надо после Германии. спускаемся в граф областей Германии и пытаемся найти путь до любой области, следующей по списку, страны.
пути нет! почему!? а потому что пора спать!

Еще проще - нет отдельных графов стран, есть единый граф. Мы выбираем две узловые точки (Париж и Москва) и дальше можно использовать любой алгоритм поиска пути на графе.

Ктулху:имхо любое динамическое блокирование черевато геморроем с поиском пути. изначально от таких идей стоит отказатся.
На мой взгляд особой проблемы нет - блокированный переход это просто еще одно ребро графа с определенной стоимостью по времени. Хотя в принципе вполне возможно что ты очень даже прав - я еще сейчас подумаю и наверно откажусь от блокировки. =)



Ктулху:если поставить поддержку юнитов в зависимость от расстояния, то данная проблема исчезнет. карты станут более ценными, т.д.

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

Ктулху:не важно. важно то, что постранство и время непрерывно. т.е. мир безклеточный.

Ага
Ктулху:тут я сам не понял, ибо если пространство непрерывно, то имеет смысл говорить об [выпухлых] областях вместо узловых точек. далее не ясно, будут ли реки иметь ширину, или они будут обозначатся некими ломанными линиями.

С выпуклыми областями есть проблема - непонятно как на них делать поиск путей и все прочее. Поэтому на суше используется граф, где все эти вопросы намного проще. Несмотря на это море все же видимо придется делать набором выпуклых областей, хотя и не хотелось бы. Но там все упрощается хотя бы тем, что в море нет рельефа =)
Река явно имеет только длину, ширина учитывается через пропускную способность Переходов через Реку.

Ктулху:кстати этот форум поддерживает что-либо по смыслу [spoil]? чтобы мона было часть длинных постов или кода скрывать?

Доберусь до фтпшника - сделаю.

Что касается твоей реализации - интересно. Хотя учти что tick() не имеет смысла на непрерывном времени, должен быть tick(float elapsedTime)

Ктулху
Участник


Репутация: 888(???)
# Дата: 6 Фев 2010 15:07:12 Поправил: Ктулху Цитата

Deimon:И ты не ответил на
Deimon:Что касается твоей реализации - интересно. Хотя учти что tick() не имеет смысла на непрерывном времени, должен быть tick(float elapsedTime)

один тик - это атомарный квант времени. можно делать tick(unsigned int ticks = 1); для "промотки" нескольких квантов(тиков).
имхо использование чисел с плавающей точкой лучше минимизировать. цельночисленные вычисления быстрее и код компактней

Deimon:С выпуклыми областями есть проблема - непонятно как на них делать поиск путей и все прочее. Поэтому на суше используется граф, где все эти вопросы намного проще.
выпухлые области тем хороши, что для них сходится поиск пути в глубину без откатов(т.е. для каждой точки, начиная с первой, анализируются все соседние точки и перемещаемся в точку с наименьшей стоимостью(как вариант стоимость можно взять равной h(новая точка, конец) + стоимость_перехода(текущая точка, новая точка)). h(точка, точка) - это эвристика или оценка оставщегося пути. вопрос, который возникает: как дискетизировать пространство? оно ведь непрерывно!.
как вариант можно сделать (полярные координаты) так:
1) выбирается шаг dr(смещение по радиусу для одной итерации. может быть постоянно везде, как и быть переменным для каждой итерации).
2) 2*PI делится на N частей. N может зависеть от свойств перемещаемого тела, от рельефа, а может быть постоянно везде.
4) таким образом получаем N новых точек. из них выбираем одну с наименьшей стоимостью
3) из текущей точки двигаемся в выбранную точку и, если конечная точка не лежит в круче радиуса dr от выбранной точки, то следуем к пункту 1)

замечания:
1) тем меньше dr, там плавнее будет движение
2) работа алгоритма O(N / dr). чем больше N и мельче dr, тем дольше путь будет строится

Deimon:Несмотря на это море все же видимо придется делать набором выпуклых областей, хотя и не хотелось бы. Но там все упрощается хотя бы тем, что в море нет рельефа =)
зато там есть роза ветров и течения

Yorick:Так они САМИ возникают? Есои да - идея хорошая
я выступаю против. тупая железяка может подсказать игроку, где, по ее мнению, лучше построить город (а ля цив4, где лучше места отмечаются светлосиними кружками).

Deimon
Кибердемон



Репутация: 1288(600)
# Дата: 8 Фев 2010 20:47:44 Цитата

Yorick:Deimon, так ты думал - может подключить хоть к разговору akasoft'a, Solver'a с ИхФанатиков (он по-русски неплохо ботает), а еще бы Сигизмунда из "тумана войны" разыскать? Каждый из них делал реальные вещи для стратегии.
Нет, я сейчас большую дискуссию не потяну - времени мало. Начнем обсуждать. Время утечет, а сделано так и ничего не будет. Поэтому я и концентрируюсь на одной конкрентной теме, а не пишу диздок с геймплеями и жанрами (привет Аку-Аку =)
Ктулху:один тик - это атомарный квант времени. можно делать tick(unsigned int ticks = 1); для "промотки" нескольких квантов(тиков).
имхо использование чисел с плавающей точкой лучше минимизировать. цельночисленные вычисления быстрее и код компактней

Использование атомарных квантов времени противоречит непрерывности пространства-времени модели. float лучше подходит для описания непрерывных величин, хоть и "на самом деле" тоже дискретен. Что касается быстроты - это преждевременная оптимизация, компактности кода не вижу (по крайней мере с точки зрения Явы).
Ктулху:выпухлые области тем хороши, что для них сходится поиск пути в глубину без откатов(т.е. для каждой точки, начиная с первой, анализируются все соседние точки и перемещаемся в точку с наименьшей стоимостью(как вариант стоимость можно взять равной h(новая точка, конец) + стоимость_перехода(текущая точка, новая точка)). h(точка, точка) - это эвристика или оценка оставщегося пути. вопрос, который возникает: как дискетизировать пространство? оно ведь непрерывно!.
как вариант можно сделать (полярные координаты) так:
1) выбирается шаг dr(смещение по радиусу для одной итерации. может быть постоянно везде, как и быть переменным для каждой итерации).
2) 2*PI делится на N частей. N может зависеть от свойств перемещаемого тела, от рельефа, а может быть постоянно везде.
4) таким образом получаем N новых точек. из них выбираем одну с наименьшей стоимостью
3) из текущей точки двигаемся в выбранную точку и, если конечная точка не лежит в круче радиуса dr от выбранной точки, то следуем к пункту 1)

Алгоритм мне понятен, но все же тему передвижения морских и воздушных объектов пока оставим.
Ктулху:зато там есть роза ветров и течения
На это точно забьем.
Ктулху:я выступаю против. тупая железяка может подсказать игроку, где, по ее мнению, лучше построить город (а ля цив4, где лучше места отмечаются светлосиними кружками).
Вне модели - вопрос интерфейса и геймплея.
superregistr:И непонятно, юнит будет ходить как хочет или только по узлам?
Юниты могут находиться в любой точке, принадлежащей Графу - то есть как в узлах, так и в произвольной точке ребра. Но граф они покинуть не могут (за исключением воздушных и морских юнитов, но о них мы пока не говорим).

superregistr
иностранный агент



Репутация: 607(???)
# Дата: 9 Фев 2010 11:57:15 Цитата

Yorick:Так вроде точка безразмерна - как же определить, что юниты "в той же" точке? +1 Смех в этом то и фишка, точка -- это бесконечно малая величина.

Deimon:
Тут есть момент, который проще показать чем объяснить. Но в простейшем случае - Юниты находятся в одной и той же точке, если находятся на одном и том же Пути и расстояние от каждого Юнита до концов Пути одно и тоже. Если я нахожусь на 50 км Волоколамского шоссе и ты на 50-м километре - значит мы в одной точке.
Ты принимаешь как данность, что два юнита находятся в одной точке, но не говоришь как им попасть в одну точку. Идут два юнита: один из Москвы в Париж, другой из Берлина в Рим. Как они попадут в одну точку?

"Радиуса обзора" нет. Нужно высылать разведку по всем направлениям. Обратите внимание, что таких направлений бесконечное число. Эта информация к размышлению Улыбка

superregistr
иностранный агент



Репутация: 607(???)
# Дата: 9 Фев 2010 12:02:55 Цитата

superregistr:точка -- это бесконечно малая величина.

Вот пример: один юнит имеет икс-координату 1.23456789, второй юнит имеет икс-координату 1.23456788. Обрати внимание: они в разных точках Улыбка

superregistr
иностранный агент



Репутация: 607(???)
# Дата: 9 Фев 2010 12:11:44 Цитата

superregistr:Обратите внимание, что таких направлений бесконечное число. Более того, непонятно на какое расстояние от основной группы высылать разведку. У тебя проблема континиума, т.е. бесконечности и непрерывности.

Deimon
Кибердемон



Репутация: 1288(600)
# Дата: 9 Фев 2010 12:23:41 Поправил: Администратор Цитата

superregistr:"Радиуса обзора" нет. Нужно высылать разведку по всем направлениям. Обратите внимание, что таких направлений бесконечное число. Эта информация к размышлению Улыбка
Если юнит находится на Пути - то направления у него всего два - вперед и назад. Если юнит находится на Узловой точке - то направлений для него столько, сколько Путей отходят от этой Узловой точки (как правило их не более десятка). Сухопутный юнит НЕ МОЖЕТ покинуть граф и пойти во чисто поле.
superregistr:Ты принимаешь как данность, что два юнита находятся в одной точке, но не говоришь как им попасть в одну точку. Идут два юнита: один из Москвы в Париж, другой из Берлина в Рим. Как они попадут в одну точку?
Для этого они должны оказаться на одном Пути (или один из них должен стоять в Узловой точке, в которую другой пришел). Зная их координаты на пути и скорости движения можно определить момент, когда они окажутся в одной точке. Естественно, что координаты из-за особенностей вычислений с плавающей точкой могут чуть-чуть не совпасть. Это как раз то, про что ты говоришь:
superregistr:Вот пример: один юнит имеет икс-координату 1.23456789, второй юнит имеет икс-координату 1.23456788. Обрати внимание: они в разных точках Улыбка
Однако эта техническая проблема легко решается техническими же способами. Например при обработке События столкновения Юнитов приравнивать координаты более быстрого юнита к координатам более медленного. Или ввести пороговую величину эпсилон, которая определяет минимальную разницу в координатах, при которой точки считаются различными (1e-5 подойдет).
Ктулху:обрати внимание, что инюты будут иметь конечные размеры
Вообще-то я предполагал, что юнит - это просто точка на карте и физического размера не имеет - только "размер" в виде числа народа/суммарного веса. =) Но твоя мысль мне очень нравится. Такой подход может упростить некоторые моменты. Ща подумаю и выскажусь предметнее.
Подумал. Нет, это вызывает больше проблем, чем упрощений. Так что юниты таки точки.

Deimon
Кибердемон



Репутация: 1288(600)
# Дата: 9 Фев 2010 12:27:08 Цитата

superregistr:Формально в такой модели все юниты будут в разных точках. Лишь чистая случайность с очень малой вероятностью может свести их в одну точку.
Поверь мне - проблемы нет. Механизм "совмещения" юнитов в одной точке уже отлажен и работает. Сюда копать уже не надо =)

superregistr
иностранный агент



Репутация: 607(???)
# Дата: 9 Фев 2010 12:40:53 Цитата

Deimon:Или ввести пороговую величину эпсилон, которая определяет минимальную разницу в координатах
Deimon:Такой подход может упростить некоторые моменты.
Итак, мы опять вернулись к радиусу обзора (радиусу видимости, радиусу действия)Смех (шутка)

Значит юниты ходят только по узловым точкам. По сути клетка -- эта та же самая узловая точка, у клетки есть размер, у узловой точки эпсилон. А если сделать, чтобы узел видел соседние узлы, то будет та же цива Улыбка

Deimon
Кибердемон



Репутация: 1288(600)
# Дата: 9 Фев 2010 12:44:56 Цитата

superregistr:Значит юниты ходят только по узловым точкам. По сути клетка -- эта та же самая узловая точка, у клетки есть размер, у узловой точки эпсилон. А если сделать, чтобы узел видел соседние узлы, то будет та же цива
Юниты ходят по графу и юниты ходят по узлам - это разные вещи. Граф - это не только узлы, но и ребра между ними. Юнит может находиться не только в узле, но в произвольной точке ребра. Так что переход от графа к клеткам в данном случае не правомерен.

Deimon
Кибердемон



Репутация: 1288(600)
# Дата: 9 Фев 2010 13:30:33 Цитата

Ктулху:почему?
Модель радикально усложняется. Например задача поиска кратчайшего пути на графе - элементарна, а на плоскости - как минимум нетривиальна. Если есть желание смоделировать такое - удачи, я такое не потяну.
Ктулху:как что? в первом приближении, ее можно просто браковать
Зачем в минимальной модели неиспользуемые сущности? А самое главное - нам нужен вменяемый ИИ, вся модель строится под его удобство, а ты ему хочешь такую пакость подложить - устаревающую информацию.
Ктулху:это не так
Пожимаю плечами

Ктулху
Участник


Репутация: 888(???)
# Дата: 9 Фев 2010 14:57:19 Цитата

Deimon:Модель радикально усложняется. Например задача поиска кратчайшего пути на графе - элементарна, а на плоскости - как минимум нетривиальна. Если есть желание смоделировать такое - удачи, я такое не потяну.
о как! непрерывное пространство легким движением руки превращается в движение точек по ребрам графа

superregistr
иностранный агент



Репутация: 607(???)
# Дата: 9 Фев 2010 18:11:07 Цитата

Deimon:Граф - это не только узлы, но и ребра между ними. Юнит может находиться не только в узле, но в произвольной точке ребра.

Юнит не может перемещаться непрерывно, он может перемещаться только с к-л приращением (дискретно). Учти возможность, что один юнит может перепрыгнуть как конь через другой и не заметить. Лично мне не совсем нравится этот подход, т.к. нарушается однородность и изотропность пространства. Простой пример: реальное расстояние до цели одно, а чтобы достичь ее нужно сделать обход по различным ребрам. Это усложняет гейплей, ихмо.

Ктулху:я предлагал клеточный мир. какой был ответ? У меня в модели юнит может перемещаться свободно по континиуму. Это связано с тем, что он привязан к конкретной клетке и может перемещаться свободно по этой клетке.

Deimon
Кибердемон



Репутация: 1288(600)
# Дата: 16 Фев 2010 10:27:59 Поправил: Администратор Цитата

Ктулху:о как! непрерывное пространство легким движением руки превращается в движение точек по ребрам графа

Ликбез.
Непрерывное пространство и время - это означает то, что оба этих показателя могут принимать бесконечное число возможных значений (с учетом ограничений компьютерной математики на точность float'а).
Антоним - дискретный, принимающий конечное число возможных значений. Например в Циве дискретное пространство - клетки. Если игра идет на карте 100 на 100 клеток, юнит может быть лишь в одном из 10000 точек дискретного пространства. Перемещаться юниты могут только "скачком" - был в этой клетке, а теперь в следующей. Никакого положения "между клеток" нет.
В непрерывной модели число таких точек неограниченно - юнит может находиться на 10 км от Москвы по Волоколамскому шоссе, может находиться на 10 км и 100 метрах, может на 10 км и 2 сантиметрах и так далее. Соответственно, юнит может передвинуться на 10 км, а может на 5 сантиметров. В любом случае, это передвижение будет происходить не скачкообразно, а путем постепенного непрерывного изменения его координат.
То же самое относится и ко времени.

С другой стороны, непрерывность и дискретность никак не связаны с числом измерений моделируемого пространства. В Циве двухмерное дискретное пространство, в Минимальной модели (в сухопутной части) - одномерное искривленное непрерывное пространство. Невозможность сухопутному юниту покинуть граф - относится к одномерности пространства, не к его непрерывности.

superregistr
иностранный агент



Репутация: 607(???)
# Дата: 16 Фев 2010 11:33:43 Цитата

Yorick:мы - почти бездельники говори за себя Улыбка , у меня есть успехи на моем поприще и реальный результат.
Deimon:В любом случае, это передвижение будет происходить не скачкообразно, а путем постепенного непрерывного изменения его координат. я бы поспорил, не может здесь быть непрерывного перемещения, а может только перемещение с каким-либо шагом (постоянным или переменным).
Deimon:Минимальной модели (в сухопутной части) - одномерное искривленное непрерывное пространство поправка, двумерное частично дискретное, частично непрерывное пространство.

superregistr
иностранный агент



Репутация: 607(???)
# Дата: 16 Фев 2010 11:38:54 Цитата

Я подумал, даже непрерывное пространство с разрывами этого пространства, вот точнее определение.

Deimon
Кибердемон



Репутация: 1288(600)
# Дата: 16 Фев 2010 12:03:31 Цитата

superregistr:я бы поспорил, не может здесь быть непрерывного перемещения, а может только перемещение с каким-либо шагом (постоянным или переменным).
Давай определимся что ты подразумеваешь под непрерывным перемещением. Вот когда на экране кинотеатра летит мяч - он двигается непрерывно? А когда мяч летит в реале?
superregistr:поправка, двумерное частично дискретное, частично непрерывное пространство.
В чем дискретность? И где двухмерность? (говорим только о сухопутных юнитах!)
superregistr:непрерывное пространство с разрывами этого пространства
Да, лучше звучит чем искривленное, хотя по сути разницы нет. Или есть?

superregistr
иностранный агент



Репутация: 607(???)
# Дата: 16 Фев 2010 17:44:52 Цитата

Deimon:Давай определимся что ты подразумеваешь под непрерывным перемещением. Вот когда на экране кинотеатра летит мяч - он двигается непрерывно? А когда мяч летит в реале? Это не особо важно, просто хотел указать на шаг. Человек ходит непрерывно? Он ходит с шагом. Так и тут. Скачкообразное перемещение происходит. Так и юнит будет перемещаться с шагом, который ты ему задашь. Непрерывного перемещения не будет. Это я к тому: учти, что юниты, имеющие разный шаг, не будут попадать в одинаковые точки и будут перескакивать друг через друга, не замечая.

Deimon:В чем дискретность? И где двухмерность? (говорим только о сухопутных юнитах!)
superregistr:Да, лучше звучит чем искривленное, хотя по сути разницы нет. Или есть?
Дискретности нет, да. Все зависит какое пространство рассматривать. Если учитывать полости между точками, по которым можно перемещаться, то это есть разрывы пространства. Если не учитывать, это скорее будет многомерное пространство, типа фракталов. Но, думаю, это никому неважно Смех

superregistr
иностранный агент



Репутация: 607(???)
# Дата: 16 Фев 2010 17:50:13 Цитата

superregistr:Непрерывного перемещения не будет. Это я к тому: учти, что юниты, имеющие разный шаг, не будут попадать в одинаковые точки и будут перескакивать друг через друга, не замечая. Сейчас подумал, что в твоей модели можно сделать так: x2-x1 -- это путь, который проходит юнит. Если другой юнит лежит в интервале (x1, x2) то значит он попадется на пути. Как то так. Короче все сказанное можно удалить Улыбка

superregistr
иностранный агент



Репутация: 607(???)
# Дата: 16 Фев 2010 18:01:57 Цитата

Короче я не учел, что ты можешь задать только начальную и конечную точки. а пространство вроде даже система одномерных пространств, фиг знает. Но тут нужно учитывать на какой именно ветке находится юнит, а веток тут, как я понимаю, очень много. Можешь удалить мои посты с 11:33:43, я мало, что могу сказать по такой теоретической модели, интересно будет посмотреть на ее реализацию..

Deimon
Кибердемон



Репутация: 1288(600)
# Дата: 16 Фев 2010 19:16:27 Цитата

superregistr:Это не особо важно, просто хотел указать на шаг. Человек ходит непрерывно? Он ходит с шагом. Так и тут. Скачкообразное перемещение происходит. Так и юнит будет перемещаться с шагом, который ты ему задашь. Непрерывного перемещения не будет. Это я к тому: учти, что юниты, имеющие разный шаг, не будут попадать в одинаковые точки и будут перескакивать друг через друга, не замечая.
Да, именно так оно и будет, если юниты будут двигаться скачкообразно. Но этого не будет, поскольку движение непрерывное. Почему? Ты все же ответь на мой вопрос:
Deimon:Давай определимся что ты подразумеваешь под непрерывным перемещением. Вот когда на экране кинотеатра летит мяч - он двигается непрерывно? А когда мяч летит в реале?

superregistr:Короче все сказанное можно удалить
Все, что не войдет в текст минимальной модели, будет в любом случае удалено. Или как минимум перемещено в Архив =)
superregistr:Короче я не учел, что ты можешь задать только начальную и конечную точки. а пространство вроде даже система одномерных пространств, фиг знает. Но тут нужно учитывать на какой именно ветке находится юнит, а веток тут, как я понимаю, очень много. Можешь удалить мои посты с 11:33:43, я мало, что могу сказать по такой теоретической модели, интересно будет посмотреть на ее реализацию..
О, ты начал понимать в чем прикол =)

Deimon
Кибердемон



Репутация: 1288(600)
# Дата: 16 Фев 2010 22:50:54 Поправил: Администратор Цитата

Данная тема создана для лучшего понимания непрерывного пространства-времени Минимальной модели. Для справки:

Пространство

Мир состоит из Суши и Моря, разделенных Побережьем.
На Побережье есть Гавани - естественное место расположения Портов (подвид Города).
От Побережья вглубь Суши идут Реки.
На Реке выделяются следующие Узловые точки:
    Устье (Гавань)
    Слияния рек
    удобные места для Переправы
    Исток (конец судоходной части реки).


Кроме точек на Реках на Суше Узловые точки бывают:
    Естественное укрепление
    Перевал в горах
    Перекресток
    Источник воды в степях и пустынях

На большинстве таких точек возможно создание Города.

Близлежащие Узловые точки соединяются Путями. Путь может быть:
Каботажным - проходим Речным и Морским Транспортом
Речным - проходим Речным Транспортом
Сухопутным - проходим Сухопутным Транспортом
Пара точек может быть соединена несколькими Путями: например Речным по Реке и двумя Сухопутными по берегам Реки.
Таким образом, задается граф возможного размещения и перемещения игровых Объектов.

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

Пространство непрерывно - это означает то, что число возможных местоположений юнита - бесконечно (с учетом ограничений компьютерной математики на точность float'а).
Антоним - дискретный, принимающий конечное число возможных значений. Например в Циве дискретное пространство - клетки. Если игра идет на карте 100 на 100 клеток, юнит может быть лишь в одном из 10000 точек дискретного пространства. Перемещаться юниты могут только "скачком" - был в этой клетке, а теперь в следующей. Никакого положения "между клеток" нет.
В непрерывной модели число таких точек неограниченно - юнит может находиться на 10 км от Москвы по Волоколамскому шоссе, может находиться на 10 км и 100 метрах, может на 10 км и 2 сантиметрах и так далее. Соответственно, юнит может передвинуться на 10 км, а может на 5 сантиметров. В любом случае, это передвижение будет происходить не скачкообразно, а путем постепенного непрерывного изменения его координат.

Нужно учесть, что непрерывность и дискретность никак не связаны с числом измерений моделируемого пространства. В Циве двухмерное дискретное пространство, в Минимальной модели (в сухопутной части) - одномерное искривленное (с разрывами) непрерывное пространство. Невозможность сухопутному юниту покинуть граф - относится к одномерности пространства, не к его непрерывности.

Время

Игровое Время непрерывно. Большинство игровых процессов не одномоментны, а имеют продолжительность во Времени.

Ход определен как периодическое (например раз в год или реже) одномоментное (все проиходит в новогоднюю полночь) и одновременное (ходы Игроков отдаются парралельно, не последовательно) изменение Игроками Целей для Оперативного ИИ и Основных настроек Государства.

t=0.0f;
while(!gameIsOver){
Дать Игрокам информацию о прошедшем
Все Игроки отдали Ценные указания ИИ;
tFinish=t+365.25f;
while(t<tFinish){
t=время ближайщего события
пересчитать состояние мира на момент времени t
информировать заинтересованные ИИ о событии
ИИ изменяет какие-то характеристики игровых объектов
}
}


Понимать это нужно так. Внутри модели есть масса показателей, изменяющихся по линейным законам со временем.
Например, грузовик движется по грунтовой дороге к Москве. Показатель, характеризующие грузовик постоянные или меняющиеся с постоянной скоростью (линейно).
Это положение грузовика - расстояние до Москвы в километрах, число тонн бензина в бензобаке, число тонн жратвы в котомке водителя.

С ним связано множество будущих потенциальных событий.
    Через 10 часов он доедет до развилки - надо будет выбирать куда повернуться.
    Через 4 часа он доедет до начала шоссе - скорость грузовика на нем изменится.
    Через 2 часа он повстречается с танком, едущим навстречу. Это может радикально изменить судьбу грузовика, особенно если танк вражеский. Ну а если он наш, то возможно что грузовик везет снаряды для этого танка.
    Через 18 часов у грузовика кончится бензин.
    Через 35 часов водитель грузовика умрет от голода.
    Через 8000 часов завершиться ход.
    Через 9 часов его догонит полевая кухня.

И так для каждого игрового объекта.
Из всех этих потенциальных событий мы выбираем ближайшее. Его время и есть время ближайшего события - точки потенциального нелинейного изменения линейности процессов.

Используется не постоянная величина внутриигрового "тика" (ну как в Е-цив, где ход при расчете делился на 20 тиков), а переменную, зависящую от насыщенности хода игровыми событиями. Вообще-то это уже детали реализации и особого смысла их обсуждать нет. =)

Передвижение Юнитов
Путь состоит из нескольких Отрезков с разными Транспортными характеристиками:
    длина, км
    модификаторы скорости - скорость транспорта = минимум(максимальная скорость Отрезка, скорость транспорта * коэффициент замедления Отрезка)

Узловая точка - сложный объект, описывающий возможности Перехода Юнитов (или составляющих Юнита между Юнитами) с одного Пути на другой Путь.
Для каждого Перехода определена максимальная Пропускная способность (тонн в час), в свою очередь Юниты имеют Вес (тонн), что позволяет определить время, необходимое для завершения Перехода.

Пока происходит Переход Юнит блокирует использование данного Перехода для других Юнитов. Юнит может быть атакован с любой стороны Перехода. В происходящей Битве Юнит получает штраф обратно пропорциональный степени присутсвтия Юнита на этой стороне.
Пример: Переправа на Реке, к которой подходят 7 Путей: 2 Речных, 2 Сухопутных с левого берега и 3 Сухопутных с правого берега. Пропускная спобоность между речными путями - бесконечная. Между сухопутными с одного и того же берега - бесконечная. Между сухопутными путями с разных берегов - конечная, зависит от Внутренней инфраструктуры (брод, паром, лодочная переправа, мост). Между сухопутными и речными (погрузка на корабли) - конечная, зависит от Внутренней инфраструктуры (речной порт).

Модель мира не запрещает двигать Юниты по чужой территории. Право собственности держится на праве сильного. Хотя это не суть важно - определение маршрута движения Юнита - забота ИИ. Реагировать на это - забота ИИ - владельца территории.

Обсуждать нужно ли такое пространство и время - не нужно. Так оно будет в любом случае, поскольку очень глубоко заложено в Прототип. Но можно уточнять неясные моменты.

Deimon
Кибердемон



Репутация: 1288(600)
# Дата: 16 Фев 2010 23:19:33 Цитата

Yorick:Думал я думал... Дэймон, ты не обижайся, может я и ошибаюсь, но модель графов - это искусственный, и наверное тупиковый, ОГРАНИЧИВАЮЩИЙ путь. Начинаются естественные проблемы - как определить попадание в одну точку? Неизбежно приходим к радиусу обзора. Почему нельзя сойти с графа? Снова: ребро графа по сути рассматривается как клетка.

Вот оно - ВОЗВРАТ К КЛЕТОЧНОМУ МИРУ. Ну может в графо-модели размер, форма клетки разные, непостоянные (?)

Ты ошибаешься =) Не думай о технической реализуемости. Рассматривай модель как точное отражение того, что происходит в реале, только с тем ограничением, что с дороги сойти нельзя. Хотя и в реале с дороги стараются не сходить =)
Дальнейшее обсуждение - http://forum.civru.com/index.php?action=vthread&forum=24&topic=9132

Версия для печати . Вверх

ОСТАВЛЯТЬ СООБЩЕНИЯ МОГУТ ТОЛЬКО ЗАРЕГИСТРИРОВАННЫЕ ПОЛЬЗОВАТЕЛИ!

Администрация форума: editors@civru.com
Rambler's Top100
XML [?]