Nelle gare in cui i corridori percorrono almeno un giro di una pista curva, le posizioni di partenza per ciascun corridore sono sfalsate, in modo che ciascun corridore percorra la stessa distanza intorno alla pista (altrimenti, il corridore nella corsia più interna avrebbe un enorme vantaggio ).
Date le lunghezze degli assi maggiore e minore (o semi-maggiore e semi-minore, se preferisci) di una traccia ellittica e il numero di corsie nella traccia, emetti le distanze dal punto di partenza della corsia più interna che ogni corsia dovrebbe essere scaglionato.
specificazioni
- Ogni corsia è un'ellisse con assi semi-maggiori 5 unità più lunghe della corsia più corta successiva. Per semplicità, supponi che le corsie abbiano larghezza 0.
- La corsia più interna inizia sempre da 0 e ogni altro punto iniziale è un numero intero positivo maggiore o uguale al punto iniziale precedente.
- L'input e l'output possono essere in qualsiasi formato conveniente e ragionevole.
- Gli input saranno sempre numeri interi.
- È necessario calcolare la circonferenza della traccia entro 0,01 unità dal valore effettivo.
- Le uscite devono essere arrotondate per difetto all'intero più vicino (piano).
- Il traguardo è il punto di partenza per il corridore più intimo. C'è solo un giro in gara.
- Le lunghezze degli assi vengono misurate utilizzando la corsia più interna della pista.
- L'output dello 0 per l'offset della corsia più interna è facoltativo.
Casi test
Formato: a, b, n -> <list of offsets, excluding innermost lane>
20, 10, 5 -> 30, 61, 92, 124
5, 5, 2 -> 31
15, 40, 7 -> 29, 60, 91, 121, 152, 183
35, 40, 4 -> 31, 62, 94
Questi casi di test sono stati generati con il seguente script Python 3, che utilizza un'approssimazione della circonferenza di un'ellisse ideata da Ramanujan:
#!/usr/bin/env python3
import math
a = 35 # semi-major axis
b = 40 # semi-minor axis
n = 4 # number of lanes
w = 5 # spacing between lanes (constant)
h = lambda a,b:(a-b)**2/(a+b)**2
lane_lengths = [math.pi*(a+b+w*i*2)*(1+3*h(a+w*i,b+w*i)/(10+math.sqrt(4-3*h(a+w*i,b+w*i)))) for i in range(n)]
print("{}, {}, {} -> {}".format(a, b, n, ', '.join([str(int(x-lane_lengths[0])) for x in lane_lengths[1:]])))
L'approssimazione utilizzata è:
Infine, ecco un diagramma utile per comprendere i calcoli degli offset:
h**5, che è ben al di sotto 0.01per una vasta gamma di valori.

