A espiral de Cornu pode ser calculada usando o método de Feynman para integrais de caminho da propagação da luz. Vamos aproximar essa integral usando a seguinte discretização.
Considere um espelho como nesta imagem, onde S
está a fonte de luz e P
o ponto em que coletamos a luz. Assumimos que a luz salta em um raio reto de S
cada ponto no espelho e depois para apontar P
. Dividimos o espelho em N
segmentos, neste exemplo 13, rotulados A
como M
, para que o comprimento do caminho da luz seja R=SN+NP
, onde SN
está a distância do S
segmento do espelho N
e semelhante para P
. ( Note que na imagem a distância de pontos S
e P
para o espelho foi encurtado muito, para efeitos visuais. O bloco Q
é bastante irrelevante, e colocou puramente para garantir reflexão através do espelho, e evitar a luz direta S
paraP
. )
Para um dado número de onda, k
o fasor de um raio de luz pode ser calculado como exp(i k R)
, onde i
está a unidade imaginária. A plotagem de todos esses fasores da cabeça para a cauda, do segmento de espelho esquerdo para a direita, leva à espiral de Cornu. Para 13 elementos e os valores descritos abaixo, isso fornece:
Para grandes N
segmentos de espelhos, isto é, a espiral se aproxima da "verdadeira" espiral de Cornu. Veja esta imagem usando vários valores para N
:
Desafio
Para um dado N
deixe x(n)
ser os x centro da coordenada x n segmento de espelho -ésimo ( n = 0,1,2,...,N
):
x(n) := n/N-0.5
Seja SN(n)
a distância do S = (-1/2, 1000)
n-ésimo segmento de espelho:
SN(n) := sqrt((x(n)-(-1/2))^2 + 1000^2)
e da mesma forma
NP(n) := sqrt((x(n)-1/2)^2 + 1000^2)
Portanto, a distância total percorrida pelo n- ésimo raio de luz é
R(n) := SN(n) + NP(n)
Em seguida, definimos o fasor (um número complexo) do raio de luz que passa pelo n- ésimo segmento de espelho como
P(n) = exp(i * 1e6 * R(n))
Agora, consideramos as somas cumulativas (como uma aproximação a uma integral)
C(n) = P(0)+P(1)+...+P(n)
O objetivo agora é traçar uma curva linear por partes através dos pontos (C(0), C(1), ..., C(n))
, onde a parte imaginária C(n)
deve ser plotada em relação à sua parte real.
A entrada deve ser o número de elementos N
, que tem um mínimo de 100 e um máximo de pelo menos 1 milhão de elementos (é claro que é permitido mais).
A saída deve ser uma plotagem ou imagem em qualquer formato de pelo menos 400 × 400 pixels ou usando gráficos vetoriais. A cor da linha, a escala dos eixos etc. não são importantes, desde que a forma seja visível.
Como esse é o código-golfe, o código mais curto em bytes vence.
Observe que esta não é uma espiral real de Cornu, mas uma aproximação a ela. A integral do caminho inicial foi aproximada usando a aproximação de Fresnel, e o espelho não é de comprimento infinito nem contém um número infinito de segmentos, assim como mencionado, não é normalizado pelas amplitudes dos raios individuais.
n
variar de1
, mas, de acordo com Luis e flawr, que eram os únicos responsáveis pela resposta no momento da mudança, eu o corrigi0
, o que torna o espelho simétrico e está de acordo com o resto do desafio. Desculpas.