Изучаем дифракцию Фраунгофера с помощью Wolfram Language и WLJS Notebook
Дифракционная картинка света и тени, получаема на большом расстоянии от силуэта объекта, находящегося перед источником света, — математически пропорциональна двумерному преобразованию Фурье

Из основ оптики: дифракция — это явление, которое возникает, когда свет (или другая волна) проходит через препятствие или отверстие и отклоняется от "очевидного" прямолинейного пути. Дифракция Фраунгофера относится к особому случаю, когда наблюдение осуществляется на большом расстоянии от объекта (или с использованием линз).
По сути форма объекта находящегося перед источником света (например, отверстия или препятствия) преобразуется в характерную картину света и тени на экране, называемую дифракционной картиной.
Ниже приведен код, который можно вставить в блокнот и попробовать порисовать самому. Это ни что иное, как лишь двумерное фурье-преобразование силуэта в реальном времени
amplidute2D[data_] := Module[{d, fw, nRow, nCol}, {nRow, nCol} = Dimensions[data]; d = data; d = d (-1)^Table[i + j, {i, nRow}, {j, nCol}]; fw = Fourier[d, FourierParameters -> {1, 1}]; (* Используем логарифмическую шкалу для удобства *) Log[1 + Abs@fw] ] (* сам виджет *) LeakyModule[{ buffer = ImageData[ConstantImage[0, {300,300}], "Real32"], shape = InputRaster[ImageSize->{300,300}, "AllowUpdateWhileDrawing"->True] }, EventHandler[shape, Function[new, With[{array = ImageData[RemoveAlphaChannel[new, White] // Binarize // ColorNegate, "Real32"]}, With[{amp = amplidute2D[array]}, buffer = amp / Max[amp]; ]; ] ]]; { shape, Image[buffer // Offload, "Real32"] } // Row ]
Ссылки
Бесплатный интерпретатор Wolfram Language
Блокнотный интерфейс WLJS Notebook


