Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有两个车轮速度的Java转向对象_Java_Math_Physics - Fatal编程技术网

具有两个车轮速度的Java转向对象

具有两个车轮速度的Java转向对象,java,math,physics,Java,Math,Physics,假设我有一个两轮物体,其中每个轮子都有一个独立的速度(lWheelV和rWheelV分别代表左手和右手的轮子)。每个车轮的速度限制在范围[-1,1](即-1和1之间) 如果lWheelV=1&rWheelV=1,则对象向前移动 如果lWheelV=-1&rWheelV=1,则对象向左旋转(逆时针) 如果lWheelV=0.5和rWheelV=1,则对象将在缓慢左转的同时向前行驶 如果lWheelV=-1&rWheelV=-1,则对象将向后移动 这可能更容易在下图中显示: 我需要什么数学来描

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

是否要求可视化、算法或代码?你能更正式一点吗?不是可视化,而是计算新位置的算法/代码。对于投票结束的人,请理解这是一个现实世界中的问题,在机器人学和物理学中经常发生。如果没有对支撑该系统的数学知识的坚定理解,那么实现这样一个系统并不完全是微不足道的。OP已经做出了一些努力来清楚地描述这个系统,这一事实应该算在他喜欢的范围内哇,这被编辑成了遗忘:)你是偶然使用了一个涂鸦机器人吗?它不应该是数学吗?atan2(diff,vehicleWidth)?请注意,我对物理学不太确定,但我想它会很接近的。这可能是一个开始。@ConnerRuhl:是的!改变。谢谢。你能改变你的例子,使它不使用向量类吗?我想你问这个问题是因为
normalise()
调用?对向量进行归一化就是将其缩放,使其长度变为1。