Каковы некоторые методы представления железнодорожных путей?

21

Некоторое время назад я изучал этот небольшой проект, но не зашел слишком далеко. Я хотел бы создать небольшую программу, которая позволяет пользователю рисовать железнодорожную колею, а затем позволяет «поезду» следовать по указанной колее в 2D-плоскости. Я бы хотел, чтобы трек был довольно свободной формы и имел бы красивую плавную линию. Я играл с кубическими сплайнами и имел приличные результаты, но у меня было множество проблем с тем, чтобы заставить поезд следовать за сплайном. У меня также было много проблем с созданием нескольких путей и переключением поезда с одного пути на другой.

У кого-нибудь есть советы, статьи или исходный код, которые могут помочь мне разобраться? Благодарность!

hokiecsgrad
источник
3
Было бы полезно, если бы вы описали, с какими проблемами вы сталкиваетесь.
Рейчел Блум
1
Я хотел бы увидеть демо вашей игры.
ashes999

Ответы:

10

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

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

В качестве альтернативы, если вы хотите поиграть с сетками (предложено Iain ), попробуйте рисовать от края до края, а не от квадрата к квадрату. Вот демонстрация (Java-апплет).

amitp
источник
7

Использование правильных сплайнов Эрмита может привести к узким углам и выглядеть довольно не по-железной дороге:

используя сплайны Эрмита

У меня были гораздо более приятные результаты, если рассматривать путь как прямые линии, соединяющие круги на стыках:

введите описание изображения здесь

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

И, в логике прокладки пути, избегайте самопересечений пути или превращайте их в перекрестки :)

Вот видео с использованием этого подхода: http://www.youtube.com/watch?v=PAVksn4btKU

Будет
источник
6

Вы можете попробовать позволить пользователю создавать треки, используя спирали Cornu . Вы найдете практически нет литературы об этом в Интернете, потому что сплайны де-факто способ представления кривых в программном обеспечении. Тем не менее, они - то, как фактические железнодорожные пути заделаны. Раф Левиен проделал большую работу по их популяризации .

необычайно щедрый
источник
2

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

Iain
источник
1
Я попробовал что-то похожее на сеточный подход. Я в основном создал фрагменты треков, чтобы вы могли соединить их вместе, чтобы дать немного больше свободы, чем простые сетки. Очень похожая концепция, я думаю. Это работало хорошо, но рисование треков, выбрав соответствующий кусок каждый раз, когда отстой.
Хокичград
2

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

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

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

У меня есть короткая демонстрация на http://www.dailymotion.com/video/xgl2kp_openrailz-tech-demo-3_videogames .

small_duck
источник
-1

Может быть, это будет полезно:
Поведение рулевого управления для автономных персонажей: http://www.red3d.com/cwr/steer/

Грегори
источник
поезда не находятся в плену на своих путях?
Будет
@Will: есть подраздел (который я не читал) о пути, следующем за red3d.com/cwr/steer/PathFollow.html
o0 '.
да, но поезд на пути может только изменить скорость. Его путь продиктован дорожкой?
Будет