假设我有一个两轮物体,其中每个轮子都有一个独立的速度(lwheelv和rwheelv分别用于左手和右手的轮子)。每个轮子的速度都限制在范围[-1,1]内(即-1和1之间)。
如果lwheelv=1&rwheelv=1,则对象向前移动
如果lwheelv=-1&rwheelv=1,则对象向左旋转(逆时针)
如果lwheelv=0.5&rwheelv=1,物体将向前行驶,同时缓慢左转
如果lwheelv=-1&rwheelv=-1,对象将向后移动。
这可能更容易在下图中显示:
我需要什么数学来描述这样一个对象,更重要的是,我如何实现能在java中复制这种行为的软件。

最佳答案

它取决于一大堆的东西,比如车辆宽度,fps等等…
但是,一些提示:
要计算一帧中车辆的旋转,可以使用arctan函数。

float leftWheel = 1.0f;
float rightWheel = 0.5f;
float vehicleWidth = 1.0f;

float diff = rightWheel - leftWheel;
float rotation = (float) Math.atan2(diff, vehicleWidth);

为了确定车辆将沿着其轴线移动的速度,使用这个:
float speedAlongAxis = leftWheel + rightWheel;
speedAlongAxis *= 0.5f;

以第一尖端计算的角度旋转车辆的轴:
float axisX = ...;
float axisY = ...;
/* Make sure that the length of the vector (axisX, axisY) is 1 (which is
 * called 'normalised')
 */

float x = axisX;
float y = axisY;

axisX = (float) (x * Math.cos(rotation) - y * Math.sin(rotation));
axisY = (float) (x * Math.sin(rotation) + y * Math.cos(rotation));

将车辆移动到轴上:
float vehicleX = ...;
float vehicleY = ...;

vehicleX += axisX * speedAlongAxis;
vehicleY += axisY * speedAlongAxis;

normalise()方法如下:
public float normalise()
{
    float len = (float) Math.sqrt(x * x + y * y);
    x /= len;
    y /= len;
    return len;
}

10-04 19:07