不久前,我在一个小型项目中调查了这个项目,但是并没有太过分。我想创建一个小程序,让用户绘制火车轨迹,然后允许“火车”在2D平面上跟随该轨迹。我希望这条赛道是自由形式,并能使线条流畅。我玩过三次样条曲线,并取得了不错的成绩,但是在使火车跟随样条曲线方面遇到了很多麻烦。创建多个轨道并将火车从一个轨道切换到另一个轨道时,我也遇到很多麻烦。
是否有人可以提供建议,文章或源代码来帮助我解决问题?谢谢!
不久前,我在一个小型项目中调查了这个项目,但是并没有太过分。我想创建一个小程序,让用户绘制火车轨迹,然后允许“火车”在2D平面上跟随该轨迹。我希望这条赛道是自由形式,并能使线条流畅。我玩过三次样条曲线,并取得了不错的成绩,但是在使火车跟随样条曲线方面遇到了很多麻烦。创建多个轨道并将火车从一个轨道切换到另一个轨道时,我也遇到很多麻烦。
是否有人可以提供建议,文章或源代码来帮助我解决问题?谢谢!
Answers:
在绘制轨道或道路时,我总是想从样条线开始。但是,上一次我在花键上苦苦挣扎(正如Rachel Blum所提到的那样,由于参数化和距离的关系,花键上的平滑运动非常危险),有人向我建议,许多真实的道路都使用圆弧而不是花键。恒定的曲率使计算距离和沿其以恒定速度移动变得容易。另外,它们看起来不错。
我开始玩在圆弧和直线之间交替的道路。它类似于Will的方法,但是圆弧具有可变的半径。我对这种方法很满意,但是最终并没有做任何事情。 试试这个演示(Flash):左侧的控件用于样条曲线,右侧的控件用于圆弧(使用滑块控制长度,使用拖动手柄控制角度)。拖动道路的尽头来绘制非常紧的曲线,以查看圆弧的外观更好。
另外,如果您要玩网格(由Iain建议),请尝试从一个边到另一个边而不是从正方形到正方形绘制。这是一个演示(Java applet)。
您可以尝试一种基于网格的方法,其中每个正方形都可以链接到一个或多个其他正方形。然后,您可能需要覆盖多个正方形的部分,以创建一些更平滑的曲线。基本上是模块化的,就像火车一样。
我尝试了各种技术来实现铁轨,但发现圆和直线段给出了最好的效果,并且数学运算最简单。
不幸的是,由于控制点的微小移动将使轨道沿完全不同的方向发送,这也使轨道铺设变得非常复杂且不是很直观。
决定如何铺设轨道的数学方法变得非常棘手,因为添加了更多控制点。
我在http://www.dailymotion.com/video/xgl2kp_openrailz-tech-demo-3_videogames上做了一个简短的演示。
也许这将是有用的:
自主字符的转向行为:http :
//www.red3d.com/cwr/steer/