1

目前我有一个简单的动画,其中一辆汽车(JPanel)接近一个路口,在它等待红绿灯变绿后继续直行。但是,我现在要进行下一步,我希望汽车以平滑的曲线向右转 90 度以转向垂直的道路。我已经大致勾勒了它的外观,曲线代表了我希望汽车转向的方式:

转弯车

我不太确定该怎么做。我想我需要代表某种贝塞尔曲线?或者矩阵变换来旋转汽车?

有人可以就在 Swing 中执行此操作的最佳方法提供建议。

4

1 回答 1

3

如果您不熟悉 Java 图形,我推荐本教程。如果我要对你正在做的事情进行编码,我会看到两个选项。

首先也是最简单的,您可以将转弯建模为“首先直行,然后沿着以我正在转弯的拐角为中心的圆的边缘转弯 90º,然后再次直行”。最简单的方法是定义一个JPanel绘制你的Image(是的,一个 JPanel;如果你不绘制它们的背景,你可以将 JPanel 层叠在一起——它们将以正确的顺序绘制;使背景JPanel不透明,以便在绘制下一帧之前清理),并给它一个AffineTransform使图像显示在您想要的位置的位置。您将需要调整变换中的增量,以使速度看起来恒定;反复试验,或一些几何学(半径 R 的 90º 意味着R*pi/2.0沿着弯曲路径的总行程),将帮助您。

困难的方法是将汽车的路线视为任意形状(例如,您可以使用贝塞尔曲线定义),从中提取一个扁平PathIterator的,沿着该迭代器以等间距跳跃前进,并计算您需要的旋转沿曲线的位置和任何给定点的航向(您可以通过获取 2 个连续样本并根据这些样本对齐汽车来估计航向)。这比使用上述方法更难,但允许您的汽车遵循任意复杂的路径。

于 2012-11-25T13:49:50.313 回答