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

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

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

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

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

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

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

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

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

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

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

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

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

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