La spirale de Cornu peut être calculée à l'aide de la méthode de Feynman pour les intégrales de chemin de propagation de la lumière. Nous allons approximer cette intégrale en utilisant la discrétisation suivante.
Considérons un miroir comme dans cette image, où se Strouve la source de lumière et Ple point de collecte de la lumière. Nous supposons que la lumière rebondit dans un rayon droit de Schaque point du miroir à un point P. Nous divisons le miroir en Nsegments, dans cet exemple 13, étiquetés Aen M, de sorte que la longueur du trajet de la lumière soit égale à R=SN+NP, où SNest la distance entre le Ssegment du miroir Net similaire pour P. ( On notera que dans l'image de la distance de points Set Ple miroir a été raccourci d' un lot, à des fins visuelles. Le bloc Qest relativement sans importance, et placé uniquement pour assurer la réflexion via le miroir, et d' éviter la lumière directe provenant SdeP. )
Pour un nombre d'onde donné, kle phaseur d'un rayon de lumière peut être calculé comme suit exp(i k R), où iest l'unité imaginaire. Le tracé de tous ces phaseurs de bout en bout à partir du segment de miroir gauche mène à la spirale de Cornu. Pour 13 éléments et les valeurs décrites ci-dessous, cela donne:
Pour les grands Nsegments de miroir, la spirale se rapproche de la "vraie" spirale de Cornu. Voir cette image en utilisant différentes valeurs pour N:
Défi
Pour une donnée Nlaisser x(n)être les x du centre -Coordonner du n segment de miroir -ième ( n = 0,1,2,...,N):
x(n) := n/N-0.5
Soit SN(n)la distance du S = (-1/2, 1000)n-ième segment de miroir:
SN(n) := sqrt((x(n)-(-1/2))^2 + 1000^2)
et pareillement
NP(n) := sqrt((x(n)-1/2)^2 + 1000^2)
Ainsi , la distance totale parcourue par le n ième rayon lumineux est
R(n) := SN(n) + NP(n)
Ensuite, nous définissons le phaseur (un nombre complexe) du rayon lumineux passant par le n- ème segment du miroir comme suit:
P(n) = exp(i * 1e6 * R(n))
Nous considérons maintenant les sommes cumulées (comme une approximation d'une intégrale)
C(n) = P(0)+P(1)+...+P(n)
Le but est maintenant de tracer une courbe linéaire par morceaux à travers les points (C(0), C(1), ..., C(n)), où la partie imaginaire de C(n)devrait être tracée par rapport à sa partie réelle.
L' entrée doit être le nombre d'éléments N, avec un minimum de 100 et un maximum d'au moins 1 million d'éléments (plus est autorisé).
La sortie doit être un tracé ou une image de tout format d'au moins 400 × 400 pixels, ou utiliser des graphiques vectoriels. La couleur de la ligne, l'échelle des axes, etc. sont sans importance, tant que la forme est visible.
Puisqu'il s'agit de code-golf, le code le plus court en octets gagne.
Veuillez noter qu'il ne s'agit pas d'une spirale de Cornu, mais d'une approximation. L'intégrale initiale du trajet a été approximée à l'aide de l'approximation de Fresnel, et le miroir n'a pas de longueur infinie ni de nombre infini de segments, de même qu'il n'est pas normalisé par les amplitudes des rayons individuels.









ndépart1, mais en accord avec Luis et flawr, qui étaient les seuls à répondre au moment du changement, je l'ai corrigé0, ce qui rend le miroir symétrique et correspond au reste du défi. Excuses.