Изучаем дифракцию Фраунгофера с помощью 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