Анимация геометрии четырехволновой дифракции плоской волны в кристалле

Виктор Кон,   16-08-2018,   kohnvict@yandex.ru

Данная программа показывает анимацию геометрии четырехволновой дифракции в кристалле в виде проекции трехмерного объекта под разными углами. На рисунке выводится пластинка кристалла определенной длины, ширины и толщины, ориентированная перпендикулярно оси Z, а также направления четырех пучков в виде стрелок и еще направления двух нормалей: к поверхности кристалла и к плоскости рассеяния для первого рефлекса. Координаты всех объектов задаются в трехмерном пространстве, после чего делается проектирование всех трехмерных точек на двумерную плоскость по определенному направлению и рисуется двумерный график проекции трехмерного объекта. В окно текстового редактора выводится краткая информация о представленном случае, а на рамку выводится изменяюшееся значение угла вращения. Анимация состоит в том, что объект вращается вокруг вертикальной оси с интервалом 2 градуса и все время показываются разные проекции объекта, то есть он виден со всех сторон. Процедура определения невидимых участков задается очередностью рисования, что требует специального способа задания входных данных.

Входные данные описывают объект в трехмерном пространстве. Для того, чтобы уменьшить число параметров и сделать объект более универсальным, задаются трехмерные углы и трехмерные длины отрезков. Потом эти параметры пересчитываются в трехмерные координаты точек в самой программе. Размеры графика фиксированы, и с целью удобнее подгонять рисунок под размеры графика введен масштабирующий множитель, который одновременно увеличивает все длины умножением на его значение.

Для того, чтобы самим приготовить конкретный вариант четырехволновой геометрии нужно задать 25 чисел. Числа записываются через запятую в коде программы, в 27-й строке htm файла как аргумент текстовой переменной txt. Я буду условно давать им обозначения для лучшего понимания. Итак первые 8 чисел -- это углы в градусах: t0,t1,t2,t3,f1,f2,f3,t4. При этом t0,t1,t2,t3 -- это углы, которые падающий и три отраженных пучка составляют с поверхностью кристалла, f1,f2,f3 -- это углы, которые проекции отраженных пучков на поверхности кристалла составляют с проекцией падающего пучка, которая принимается за ось Х, и ее угол всегда равен нулю. Угол t4 -- это угол Брэгга для первого отражения, то есть половина угла между падающим и первым отраженным пучком. При этом предполагается, что нормаль к поверхности кристалла и ось Z направлены вверх, падающий пучок смотрит вниз, отраженные пучки могут смотреть вверх или вниз. Все углы, как правило, положительные.

Следующие 5 параметров задают пластинку кристалла. Чтобы правильно задать ось вращения, совпадающую с нормалью к поверхности кристалла, поверхность задается двумя расстояниями от левой и правой границ до оси вращения, двумя расстояниями от передней и задней границ до оси вращения и толщиной пластинки, то есть a,b,c,d,t. При этом параметры a,c,t нужно задавать отрицательными, просто так написана программа, что знаки в явном виде не учитываются.

Следующие 5 параметров описывают длины векторов падающего и дифрагированных пучков. Для падающего пучка нужны две длины: над поверхностью (a0) и под поверхностью (b0), для отраженных только по одной длине над или под поверхностью (a1,a2,b3). В данной программе в явном виде предполагается, что третий рефлекс идет под поверхностью, так что он задается положительной длиной и рисуется в самом начале, а параметр a0 должен быть отрицательным. Еще 2 параметра описывают верхнюю и нижнюю длины нормали к поверхности (a4,b4), причем параметр b4 должен быть отрицательным. Следующие 2 параметра описывают длину нормали к плоскости рассеяния для первого рефлекса a5 (нижняя часть не рисуется) и масштабирующий множитель g.

В данной версии, в отличие от версии для трехволнового случая в программе задается начальный угол вращения t5, расстояние от точки зрения до центра кристалла R0, и вертикаль направления проектирования v0. Это позволяет более адекватно оптимизировать рисунок в особо сложных случаях. В компланарном случае плоскость рассеяния общая для всех рефлексов. Если к тому же она и перпендикулярна к поверхности, то нормаль лежит в плоскости кристалла, а трехмерный объект выглядит совсем просто.

Текст комментария с указанием, какой конкретный случай рассматривается, записывается в 26-й строке в кавычках после знака равенства. Программа всегда показывает один вариант входных данных в качестве примера. Для получения рисунков с другим вариантом, исходный текст надо просто отредактировать как описано выше. Но для этого необходимо в примере программы, записанном на моем сайте по адресу [01], посмотреть код, нажимая клавиши [Ctrl]+[U], скопировать его в буфер обмена с помощью клавиш [Ctrl]+[A] и затем [Ctrl]+[C], открыть любую программу редактора текстов и в новом файле нажать клавиши [Ctrl]+[V]. Текст появится в окне редактора, затем его можно спасти в файл с новым уникальным именем. По перед, как спасать в файл, необходимо его отредактировать как указано выше.

Для получения вариантов с параметрами, описывающими реальную ситуацию с конкретным кристаллом, конкретными отражениями и конкретной длиной волны излучения возможно понадобится написать собственную программу. Так как многообразие структур в кристаллах огромно, то для каждой структуры можно иметь свою программу или общую для всех структур, но более сложную. Рисунки, которые делает данная программа, можно использовать в презентациях и отчетах, а также в научных статьях.

Несколько слов о том как работает программа. Изначально она показывает статический рисунок под определенным углом 101 градус. Клик на кнопке [Go (+)] запускает анимацию с увеличением угла вращения на 2 градуса через каждые 0.2 секунды. Клик на кнопке [Go (--)] запускает анимацию в обратном направлении. Клик на кнопке [Stop] останавливает анимацию на паузу. Каждая кнопка может использоваться независимо от других, то есть возможен любой порядок кликов. Клавиатура в данной анимации не используется, так как кнопки являются более универсальными и работают даже на планшетах и смартфонах без клавиатуры.

Если нужно только поменять вариант объекта, то достаточно скопировать и отредактировать всего один указанный файл. При этом сам код программы будет вызываться с моего сайта в интернете. Но для работы без интернета, необходимо скопировать и второй файл с кодом программы. В коде htm файла это файл дается ссылкой в 28-й строке. Файл надо записать рядом с htm файлом и отредактировать ссылку, указывая только имя файла. Его можно не менять, если вы не собираетесь его редактировать. Но такие параметры как размеры кадра рисунка, шаг вращения оптимизированы и записаны как раз в этом втором файле.

Я не стал увеличивать число входных параметров, в которых все время пришлось бы задавать одни и те же значения. Но если вам необходимо это изменить, то нужно редактировать и второй файл. Я пока не стану объяснять как это делается. Если кому очень надо, то напишите мне письмо в электронную почту. Пару слов о программах. Очень хороший редактор текстов называется Notepad2. Его можно найти поиском в Яндексе и скачать. Он бесплатный. Но еще лучше использовать мою программу vkUtility [02]. У нее есть очень мощный встроенный редактор, много готовых программа и интерпретатор языка программирования ACL, который позволит провести нужные расчеты входных параметров, если в этом возникнет необходимость.

Вообще говоря, можно было бы сделать программу, которая работает сразу с несколькими вариантами входных данных. Пока такой программы нет, на каждый вариант надо открывать свой сайт. Но это совсем не трудно, учитывая, что основной файл сайта очень короткий, его можно скопировать с другим именем и поменять в нем входные данные. Пока к первому примеру сделан второй пример [03]. Список ссылок постепенно будет увеличиваться.

Ссылки на интернет

[01] Образец кода программы для копирования и пример работы программы
[02] vkUtility -- универсальная программа, которая делает все.
[03] Рабочий пример дифракции в кристалле лангатата