JSFiddle - React, Tailwind, and code Playground

HTML

<p> x <input id="x" value=100 />
<p> y <input id="y" value=100 />
<p> angle <input id="angle" value=180 />
<p> <button id="go" >Go</button>
    <pre></pre>
<p>Target: <span id="target"></span></p>
<ul id="angles">
</ul>

JavaScript

function objFromForm(){
    return {           
        angle: $('#angle').val(),
        shipType: {turnSpeed:8},
        mode: { dest: {x:0, y:0}},
    x:$('#x').val(), y:$('#y').val()       
     };      
}
 obj = objFromForm();
        

function step(obj)
{        
    obj.angle %= 360;
    // Calculate angle to target point
    var targetAngle = (Math.atan2(obj.mode.dest.y - obj.y, obj.mode.dest.x - obj.x) * (180 / Math.PI))+90;
    targetAngle = (targetAngle+360)%360;            
    $('#target').text(targetAngle);            
    if(obj.angle != targetAngle)
    {
        // Get the difference between the current angle and the target angle
        var netAngle = (obj.angle - targetAngle + 360)%360 ;
        var delta = Math.min(Math.abs(netAngle-360), netAngle, obj.shipType.turnSpeed);
        var sign  = (netAngle-180) >= 0 ? 1 : -1;
        $('#angles').append("<li>"+obj.angle+" (net: " + netAngle + ", delta: "+ delta +", sign:"+ sign+" )</li>");
        // Turn in the closest direction to the target

        obj.angle += sign*delta+360;            
        obj.angle %= 360;
        setTimeout(function(){step(obj);}, 100);
    }
    else
    {
        $('#angles').append("<li> Done: "+obj.angle+"</li>");
    }
}


step(obj);
$('pre').text(JSON.stringify(objFromForm()));
$('#go').click(function(){$('#angles').html(''); step(objFromForm());});