Для сохранения результатов подключил cfitsio, еще планирую сделать сохранение в png/tiff. Выше — пример изображения, которое получилось у меня на «матрице» 1000×1000 пикселей с пикселем 10×10 мкм при наложении на поверхность зеркала сглаженную матрицу 10×10 со случайными значениями (от 0 до 30 нм) отклонений. Вроде бы не так уж и много: 30 нм — это всего-то порядка λ/16, а уже получаем гауссиану с полушириной порядка 1'' (а весь разброс пикселей доходит до трех секунд).
Для примера вот что получается, если поднять точность поверхности зеркала до десяти нанометров (правда, здесь уже сильно сказывается ограниченность float): Получаем полуширину в четверть секунды, а полную — в полторы!
Ладно, на «точечки» посмотрели, надо бы проверить, получится ли кома. Для начала я «наклонил» зеркало на 1°, а чтобы изображение оставалось в той же точке, объект «наклонил» в противоположную сторону на 2°. В итоге получилась вот такая прелесть (количество «фотонов» увеличил до ста миллионов):
Ну и напоследок — кома для идеального зеркала:
Итак, нужно еще дописать CPU-версию того же самого, чтобы сравнить производительность, а еще — сделать наконец маскирование. И можно будет строить гартманнограммы для проверки своих теорий. А то версия на Octave была уж слишком медленной и неточной.
Journal information