Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

221
Vistas
How to move an angle closer to another angle?

If I have an angle theta (radians), a small angle delta (radians) and a target angle theta prime (radians), how can I increment/decrement theta by delta such that it would move closer to the angle theta prime? The goal is to push it closer and eventually reach and equal theta prime (but not go past it). It should work for negative radians or radians that are above Math.PI or lower than -Math.PI.

something like this

function MoveTheta(theta, delta, theta_prime) {
    // magic to move theta by at most delta closer to theta_prime
    return new_theta_value;
}

I would keep calling MoveTheta until MoveTheta equals theta_prime. How could this be written?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

function MoveTheta(theta, delta, theta_prime) {
    // find the distance between theta and theta_prime
    var diff = theta_prime - theta;
    
    // find the number of times you need to add/subtract delta to theta in order
    // to get to theta_prime (without passing theta_prime)
    var deltas = Math.floor(diff / delta);
    
    var new_theta_value = theta + deltas * delta;
    return new_theta_value;
}

Is this what you're looking for?

about 4 years ago · Juan Pablo Isaza Denunciar

0

You can try the following solution:

First evaluate the distance from the target angle . Then if the distance is less than the step return the target angle or the original angle plus the step multiplied by the sign of the difference to take into account the direction of the rotation.

function move(
theta, // the original angle
delta, // the step
theta_prime // the target angle
)
{

    const diff = theta_prime - theta; 

    return Math.abs(diff) > delta ? tetha + Math.sign(diff) * delta : tetha_prime;
}

if the result of this method is equal to the target angle than the procedure is complete.

function move(theta, delta, theta_prime) {
const diff = theta_prime - theta;
return Math.abs(diff) > delta ? theta + Math.sign(diff) * delta : tetha_prime;

}

let theta = 75;
const delta = 4;
const theta_prime = 32;

while (theta != theta_prime) {
theta = move(theta, delta, theta_prime);
console.log(theta);
}

console.log("done");

about 4 years ago · Juan Pablo Isaza Denunciar

0

Unless you don't care about usage of trig. functions, try the next approach (should solve problems with transition over zero, choose shortest direction etc):

rot = atan2(cos(th)*sin(th_pr)-cos(th_pr)*sin(th), 
            cos(th)*cos(th_pr)+sin(th_pr)*sin(th))
if rot >= 0 
      new_th = th + min(delta, rot)     
else
      new_th = th + max(-delta, rot)     
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda