コルニュスパイラルは、光伝播の経路積分のためのファインマンの方法を用いて算出することができます。次の離散化を使用して、この積分を近似します。
この画像のように鏡を考えてみましょう。ここS
で、光源とP
光を集めるポイントがあります。S
鏡の各点から点へと直線光線で光が跳ね返ると仮定しますP
。我々は、中にミラーを分割するN
標識された本実施例13において、セグメントA
へのM
光の経路長であるように、R=SN+NP
ここで、SN
からの距離であるS
ミラーセグメントにN
、そしてための同様P
。(画像中の点の距離ことを注意S
及びP
ミラーには、ブロックが視覚的目的のために、多くの短縮されたQ
かなり無関係であり、ミラーを介して反射を確実にするために純粋に配置され、そしてからの直接光を避けるためS
にP
。)
所与の波数ためフェーザ光線のように計算することができ、ここで、虚数単位です。これらすべてのフェーザーを左から右に向かって左右にプロットすると、Cornuスパイラルにつながります。13個の要素と、以下で説明する値の場合、次のようになります。k
exp(i k R)
i
大きいN
、つまり多くのミラーセグメントの場合、スパイラルは「真の」Cornuスパイラルに近づきます。以下のさまざまな値を使用してこの画像を参照してくださいN
。
チャレンジ
指定N
されたlet に対して、n番目のミラーセグメントx(n)
のx座標の中心()を指定します。n = 0,1,2,...,N
x(n) := n/N-0.5
をn番目のミラーセグメントまでSN(n)
の距離とS = (-1/2, 1000)
します。
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の最小値と少なくとも100万個の要素(複数許容勿論である)の最大値を有します。
出力は、少なくとも400×400画素、またはベクトルグラフィックスを使用して任意の形式でプロットまたはイメージであるべきです。形状が見える限り、線の色、軸のスケールなどは重要ではありません。
これはコードゴルフであるため、バイト単位の最短コードが優先されます。
これは実際のCornuスパイラルではなく、近似であることに注意してください。初期経路積分はフレネル近似を使用して近似されており、ミラーの長さは無限ではなく、セグメントの数も無限ではありません。また、個々の光線の振幅によって正規化されていません。
n
からの範囲1
でしたが、変更時に唯一の回答者であったLuisとflawrに同意して、fromに修正しました0
。これにより、ミラーが対称になり、残りの課題に同意します。謝罪。