¿Hay algún algoritmo de dirección de camino legible para humanos?

Álgebra simple Para las dos partes siguientes, debe saber de qué punto proviene el usuario (excepto si el usuario está en el primer punto). Suponga que el usuario está en el punto [matemáticas] p_i (a_i, b_i) [/ matemáticas] y quiere ir al punto [matemáticas] p_ {i + 1} = (a_ {i + 1}, b_ {i + 1 }) [/ math] y estaba en el punto [math] p_ {i-1} = (a_ {i-1}, b_ {i-1}) [/ math].

Cálculo del ángulo: use el producto Dot para calcular el ángulo entre la dirección del usuario actual y la dirección a la que debe ir:

[math] angle = arccos (\ frac {L_1.L_2} {|| L_1 ||. || L_2 ||}) [/ math]

donde [matemáticas] L_1 = (a_i – a_ {i-1}, b_i-b_ {i-1}) [/ matemáticas] y [matemáticas] L_2 = (a_ {i + 1} – a_ {i}, b_ { i + 1} -b_ {i}) [/ math] y [math] || L_1 || [/ math] significa la distancia de [math] L_1 [/ math] desde el origen (o su longitud).

Tenga en cuenta que la fórmula anterior no especifica el ángulo correcto directamente, ya que este ángulo [matemático] [/ matemático] es el ángulo más pequeño entre dos líneas ([matemático] L_1 [/ matemático] y [matemático] L_2 [/ matemático]) . Por lo tanto, su ángulo real podría ser [matemático] ángulo [/ matemático] o [matemático] 180 – ángulo [/ matemático]. Estoy seguro de que encontrará una manera de saber cuándo usarlos.

Dirección de cálculo: Use el producto Cross para calcular el siguiente valor:

[matemáticas] P = (a_i – a_ {i-1}) (b_ {i + 1} – b_ {i-1}) [/ matemáticas]
[matemáticas] ~~~~ – (b_i – b_ {i-1}) (a_ {i + 1} – a_ {i-1}) [/ matemáticas]

Ahora:

  1. Si [matemática] P = 0 [/ matemática], el usuario debe continuar en la misma dirección o debe girar 180 grados.
  2. Si [matemáticas] P> 0 [/ matemáticas], el usuario debe girar a la derecha.
  3. Si [matemáticas] P <0 [/ matemáticas], el usuario debe girar a la izquierda.

Combina el ángulo y la dirección.