java - 使汽车(JPanel)在 Swing 中以平滑的曲线转弯

标签 java swing matrix bezier

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

Turning Car

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

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

最佳答案

如果您不熟悉 Java 图形,我推荐 this tutorial .如果我要对您正在做的事情进行编码,我会看到两个选择。

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

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

关于java - 使汽车(JPanel)在 Swing 中以平滑的曲线转弯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13551371/

相关文章:

r - 不同年份具有不同颜色的图 - R

r - 二进制矩阵中的 1 组群

java - GWT、Eclipse 插件如何重命名项目以及 .gwt.xml 文件?尝试这样做时出现错误

java - 在 jFrame 上同时添加 2 个形状

java - Tomcat 服务器内存泄漏

swing - netbeans on ubuntu 字体外观

java - 如何在键盘应用程序中调整按钮大小?

r - 查找逻辑矩阵的每一行是否至少有一个 TRUE

java - Hibernate标准返回包含相同对象的列表,如何解决它?

java - 简单方程未通过单元测试