Cornu spiralna może być obliczona przy użyciu metody Feynmana do całki toru propagacji światła. Przybliżymy tę całkę, stosując następującą dyskretyzację.
Rozważmy lustro jak na tym zdjęciu, gdzie S
jest źródło światła i P
punkt, w którym zbieramy światło. Zakładamy, że światło odbija się prostym promieniem od S
każdego punktu w lustrze, a następnie do punktu P
. Dzielimy lustro w N
segmentach, w tym przykładzie 13, oznaczonej A
na M
tak, że długość drogi światła jest R=SN+NP
, gdzie SN
jest odległością S
do segmentu lustro N
i podobna P
. ( Należy zauważyć, że na zdjęciu odległość punktów S
i P
lustra została znacznie zmniejszona, ze względów wizualnych. Blok Q
jest raczej nieistotny i umieszczony wyłącznie w celu zapewnienia odbicia przez lustro i uniknięcia bezpośredniego światła od S
doP
. )
Dla danej liczby falowej fazorów z promień światła może być obliczona , w którym to jednostka urojona. Wykreślenie tych wszystkich fazorów od lewej do prawej prowadzi do spirali Cornu. W przypadku 13 elementów i wartości opisanych poniżej daje to:k
exp(i k R)
i
W przypadku dużych N
, tj. Wielu segmentów lustrzanych, spirala zbliża się do „prawdziwej” spirali Cornu. Zobacz ten obraz przy użyciu różnych wartości dla N
:
Wyzwanie
Dla danej N
niech x(n)
będzie współrzędnym x środka n-tego lustrzanego segmentu ( n = 0,1,2,...,N
):
x(n) := n/N-0.5
Niech SN(n)
będzie odległością od S = (-1/2, 1000)
n-tego segmentu lustrzanego:
SN(n) := sqrt((x(n)-(-1/2))^2 + 1000^2)
i podobnie
NP(n) := sqrt((x(n)-1/2)^2 + 1000^2)
Zatem całkowita odległość przebyta przez n- ty promień światła wynosi
R(n) := SN(n) + NP(n)
Następnie definiujemy fazor (liczbę zespoloną) promienia świetlnego przechodzącego przez n- ty segment lustrzany jako
P(n) = exp(i * 1e6 * R(n))
Teraz bierzemy pod uwagę sumy skumulowane (jako przybliżenie całki)
C(n) = P(0)+P(1)+...+P(n)
Cel polega teraz na wykreśleniu częściowej krzywej liniowej przez punkty (C(0), C(1), ..., C(n))
, w których wyobrażona część C(n)
powinna zostać narysowana względem jej rzeczywistej części.
Dane wejściowe powinny być liczbą elementów N
, która ma minimum 100, a maksimum co najmniej 1 milion elementów (więcej jest oczywiście dozwolone).
The wyjściowe powinny stanowić wykres lub obraz w dowolnym formacie co najmniej 400 x 400 pikseli lub z wykorzystaniem grafiki wektorowej. Kolor linii, skala osi itp. Są nieistotne, dopóki kształt jest widoczny.
Ponieważ jest to code-golf, wygrywa najkrótszy kod w bajtach.
Należy pamiętać, że nie jest to rzeczywista spirala Cornu, ale jej przybliżenie. Początkowa całka ścieżki została aproksymowana za pomocą aproksymacji Fresnela, a lustro nie ma nieskończonej długości i nie zawiera nieskończonej liczby segmentów, a także wspomniane, że nie jest znormalizowane przez amplitudy poszczególnych promieni.
n
od1
, ale w zgodzie z Luisem i flawr, którzy byli jedynymi osobami udzielającymi odpowiedzi w chwili zmiany, poprawiłem go0
, co sprawia, że lustro jest symetryczne i zgadza się z resztą wyzwania. Przeprosiny.