假设我有一个两轮物体,其中每个轮子都有一个独立的速度(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;
}