可以使用Feynman方法计算光传播的路径积分的Cornu螺旋。我们将使用以下离散化近似该积分。
考虑这张图中的镜子,S
光源P
在哪里,我们在哪里收集光。我们假设光线以直线光线从S
反射镜中的每个点反射然后指向P
。我们将镜子分成若干N
段,在本例中为13,标记A
为M
,以使光的路径长度为R=SN+NP
,其中SN
是S
到镜段的距离N
,与相似P
。(请注意,在图像中的点的距离S
和P
到反射镜已缩短了很多,对于视觉的目的。该块Q
是相当无关的,并且纯粹放置经由反射镜,以确保反射,并避免直接光照S
到P
。)
对于给定的波数k
,可以将光线的相量计算为exp(i k R)
,其中i
是虚数单位。将所有这些相量从左后视镜面到右图从头到尾绘制会导致Cornu螺旋。对于13个元素及其下面描述的值,得出:
对于较大N
的镜面段(即很多镜面段),螺旋线接近“真正的” Cornu螺旋线。使用各种值查看此图像N
:
挑战
对于给定的N
设x(n)
是X的的-协调中心Ñ个反射镜区段(n = 0,1,2,...,N
):
x(n) := n/N-0.5
让SN(n)
是的距离S = (-1/2, 1000)
到第n个反射镜部分:
SN(n) := sqrt((x(n)-(-1/2))^2 + 1000^2)
同样
NP(n) := sqrt((x(n)-1/2)^2 + 1000^2)
因此,第n条光线传播的总距离为
R(n) := SN(n) + NP(n)
然后我们定义通过第n个镜面段的光线的相量(复数)为
P(n) = exp(i * 1e6 * R(n))
现在,我们考虑累积总和(作为积分的近似值)
C(n) = P(0)+P(1)+...+P(n)
现在的目标是通过各点绘制分段线性曲线(C(0), C(1), ..., C(n))
,其中的虚部C(n)
应相对于其实部绘制。
该输入应该是元件的数量N
,其具有至少100和最大至少为1种百万个元素的(更是当然允许)。
的输出应在至少400×400像素,或者使用矢量图形的任何格式的曲线图或图像。只要形状可见,线条的颜色,轴的比例等都不重要。
由于这是代码高尔夫球,因此以字节为单位的最短代码为准。
请注意,这不是实际的Cornu螺旋,而是近似值。初始路径积分已使用菲涅耳近似法进行了近似,并且反射镜既不是无限长的,也不包含无限数量的线段,而且提到的它还没有通过各个光线的振幅进行归一化。
n
范围是从1
,但与路易斯·弗拉克(他们在更改时唯一的回答者)一致,我将其更正为from0
,这使镜像对称,并且与其余挑战保持一致。道歉。