Корень спираль может быть вычислена с использованием методы Фейнман для интегралов по путям распространения света. Мы аппроксимируем этот интеграл, используя следующую дискретизацию.
Рассмотрим зеркало, как на этом изображении, где S
находится источник света и P
точка, где мы собираем свет. Мы предполагаем, что свет отражается прямым лучом от S
каждой точки в зеркале, а затем до точки P
. Разделим зеркало в N
сегментах, в данном примере 13, меченого A
с M
, так что длина пути света R=SN+NP
, где SN
это расстояние от S
до зеркального сегмента N
, и аналогичные для P
. ( Обратите внимание , что на изображении расстояния точек S
и P
к зеркалу было сокращено много, для визуальных целей. Блок Q
скорее не имеет значения, и помещает чисто , чтобы обеспечить отражение через зеркало, и избежать прямого света от S
доP
, )
Для заданного волнового числа Фазор луча света может быть вычислена как , где находится мнимая единица. Построение всех этих векторов от головы до хвоста от левого зеркального сегмента вправо приводит к спирали Корну. Для 13 элементов и значений, описанных ниже, это дает:k
exp(i k R)
i
Для больших N
, то есть множества зеркальных сегментов, спираль приближается к «истинной» спирали Корну. Посмотрите это изображение, используя различные значения для N
:
Вызов
Для данного N
пусть x(n)
будет x -координатный центр n-го зеркального сегмента ( 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 пикселей или с использованием векторной графики. Цвет линии, масштаб осей и т. Д. Не важны, пока форма видна.
Поскольку это код-гольф, выигрывает самый короткий код в байтах.
Обратите внимание, что это не настоящая спираль Корну, а ее приближение. Начальный интеграл по траектории был аппроксимирован с использованием приближения Френеля, и зеркало не имеет бесконечной длины и не содержит бесконечного числа сегментов, а также упомянуто, что оно не нормируется по амплитудам отдельных лучей.
n
диапазоне от1
, но, согласившись с Луисом и Флауром, которые были единственными ответчиками во время изменений, я исправил его, чтобы сделать так0
, чтобы зеркало было симметричным и соответствовало остальной части задачи. Извиняюсь.