Dans les courses où les coureurs font au moins un tour de piste courbe, les positions de départ de chaque coureur sont échelonnées, de sorte que chaque coureur parcourt la même distance autour de la piste (sinon, le coureur dans la voie la plus intérieure aurait un énorme avantage ).
Compte tenu des longueurs des axes majeurs et mineurs (ou semi-majeur et semi-mineur, si vous préférez) d'une piste elliptique et du nombre de voies dans la piste, affichez les distances à partir du point de départ de la voie la plus intérieure que chaque voie devrait être échelonné.
Caractéristiques
- Chaque voie est une ellipse avec des axes semi-majeurs 5 unités plus longues que la voie la plus courte suivante. Par souci de simplicité, supposons que les voies ont une largeur de 0.
- La voie la plus intérieure commence toujours à 0, et chaque autre point de départ est un entier positif supérieur ou égal au point de départ précédent.
- L'entrée et la sortie peuvent être dans n'importe quel format pratique et raisonnable.
- Les entrées seront toujours des entiers.
- Vous devez calculer la circonférence de la piste à 0,01 unité près de la valeur réelle.
- Les sorties doivent être arrondies à l'entier le plus proche (plancher).
- La ligne d'arrivée est le point de départ du coureur le plus interne. Il n'y a qu'un tour dans la course.
- Les longueurs des axes sont mesurées en utilisant la voie la plus intérieure de la piste.
- La sortie du 0 pour le décalage de la voie la plus intérieure est facultative.
Cas de test
Format: 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
Ces cas de test ont été générés avec le script Python 3 suivant, qui utilise une approximation de la circonférence d'une ellipse conçue par 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'approximation utilisée est:
Enfin, voici un diagramme utile pour comprendre les calculs des décalages:
h**5
, ce qui est bien inférieur 0.01
à une large gamme de valeurs.