代表火车轨道的方法有哪些?


21

不久前,我在一个小型项目中调查了这个项目,但是并没有太过分。我想创建一个小程序,让用户绘制火车轨迹,然后允许“火车”在2D平面上跟随该轨迹。我希望这条赛道是自由形式,并能使线条流畅。我玩过三次样条曲线,并取得了不错的成绩,但是在使火车跟随样条曲线方面遇到了很多麻烦。创建多个轨道并将火车从一个轨道切换到另一个轨道时,我也遇到很多麻烦。

是否有人可以提供建议,文章或源代码来帮助我解决问题?谢谢!


3
如果您描述遇到的问题,这将有所帮助。
雷切尔·布卢姆

1
我希望看到您的游戏演示。
ashes999 2011年

Answers:


10

在绘制轨道或道路时,我总是想从样条线开始。但是,上一次我在花键上苦苦挣扎(正如Rachel Blum所提到的那样,由于参数化和距离的关系,花键上的平滑运动非常危险),有人向我建议,许多真实的道路都使用圆弧而不是花键。恒定的曲率使计算距离和沿其以恒定速度移动变得容易。另外,它们看起来不错。

我开始玩在圆弧和直线之间交替的道路。它类似于Will的方法,但是圆弧具有可变的半径。我对这种方法很满意,但是最终并没有做任何事情。 试试这个演示(Flash):左侧的控件用于样条曲线,右侧的控件用于圆弧(使用滑块控制长度,使用拖动手柄控制角度)。拖动道路的尽头来绘制非常紧的曲线,以查看圆弧的外观更好。

另外,如果您要玩网格(由Iain建议),请尝试从一个边到另一个边而不是从正方形到正方形绘制。这是一个演示(Java applet)。



7

使用正确的Hermite花键会导致拐角变紧,并且看起来像是未训练的轨道:

使用Hermite花键

通过将路径视为在关节处连接圆的直线,我得到了令人愉悦的结果:

在此处输入图片说明

诀窍是计算相邻关节圆的内切线和外切线计算出每个关节的绕线,以便您在其右侧传递。

并且,在铺线逻辑中,避免路径自相交或将其变成交点:)

这是使用此方法的视频:http : //www.youtube.com/watch?v=PAVksn4btKU


6

您可以尝试让用户使用Cornu螺旋创作曲目。您可以在网上找到几乎所有关于它的文献,因为样条曲线是在软件中表示曲线的实际方法。尽管如此,它们是实际铁轨的路径。Raph Levien已经做了很多推广他们的工作。


2

您可以尝试一种基于网格的方法,其中每个正方形都可以链接到一个或多个其他正方形。然后,您可能需要覆盖多个正方形的部分,以创建一些更平滑的曲线。基本上是模块化的,就像火车一样。


1
我尝试了类似于基于网格的方法。我基本上创建了跟踪片段,以便您可以将它们单击在一起,从而比简单的网格具有更多的自由度。我认为非常相似的概念。效果很好,但是每次吮吸时都通过选择适当的片段来绘制轨道。
hokiecsgrad

2

我尝试了各种技术来实现铁轨,但发现圆和直线段给出了最好的效果,并且数学运算最简单。

不幸的是,由于控制点的微小移动将使轨道沿完全不同的方向发送,这也使轨道铺设变得非常复杂且不是很直观。

决定如何铺设轨道的数学方法变得非常棘手,因为添加了更多控制点。

我在http://www.dailymotion.com/video/xgl2kp_openrailz-tech-demo-3_videogames上做了一个简短的演示。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.