OberonCore
https://forum.oberoncore.ru/

Как отобразить линейчатый спектр?
https://forum.oberoncore.ru/viewtopic.php?f=35&t=4924
Страница 1 из 1

Автор:  Андрей Антошков [ Среда, 08 Январь, 2014 15:08 ]
Заголовок сообщения:  Как отобразить линейчатый спектр?

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

Так как я практически прослушал курс Ф.В.Ткачева - "Программирование для непрофессионалов", то решил реализовать ее в среде BlackBox. Численный расчет реализовал быстро, тем более что уравнения решаются аналитически, а вот с отображением спектра возникли проблемы. Линейчатый спектр, к примеру ртутной лампы - это набор линий со следующими координатами:
365.0153 нм
404.6563 нм
435.8328 нм
546.0735 нм
578.2 нм
Я попытался воспользоваться встроенным модулем Views, но функция DrawRect принимает только целые аргументы в качестве координат, мне же необходима точность до 2 знака как минимум. Если же *100 и переводить в целые числа, то окно, в котором отображены линии получается гораздо больше экрана.
Так же я попробовал разобраться в подсистеме DiaPlot, которая может отображать массивы реальных чисел, но она настроена на графическое отображение и все точки соединяются.
Попытался разобраться в программе тетриса, но из-за слабых знаний в программировании, не смог разобраться с построением модели.
Пожалуйста, подскажите, как мне реализовать поставленную задачу? Какую подсистему изучать целенаправленно и не разбрасываться на другие?

Автор:  Пётр Кушнир [ Среда, 08 Январь, 2014 15:18 ]
Заголовок сообщения:  Re: Как отобразить линейчатый спектр?

Андрей Антошков писал(а):
мне же необходима точность до 2 знака как минимум.
Но ведь изображение на экране состоит из дискретных элементов (пикселов). Поэтому рисунок всегда будет приближенным по точности.
Можно поступить следующим образом.
Отобразить нужную часть диапазона на экране в подходящем масштабе.
Например 578 - 365 = 213 (нм).
Плюс запас с двух сторон, округлим до 250 нм.
Если установить масштаб 1 нм = 4 пикселя, то вы сможете на экране шириной 1000 пикселей отобразить полосы спектра в диапазоне 365 .. 578 нм с точностью до 0,25 нм.
А если усложнить ваше отображение, то можно будет динамически увеличивать масштаб при просмотре, например, колесом мыши.

Автор:  Иван Денисов [ Среда, 08 Январь, 2014 16:52 ]
Заголовок сообщения:  Re: Как отобразить линейчатый спектр?

Я писал на третьем курсе программу для отображения спектров. Сейчас проведу ревизию и выложу тут :) думаю, она вам поможет разобраться что к чему и допилите для своих нужд. Также есть программа для отображения фотографий и графики поверх этих риснуков, если объединить эти программы, то возможно совмещать спектры с фотоизображениями и даже как-то автомматизировать процесс сличения линий. Тоже ссылку на нее дам в следующем сообщении.

Автор:  Евгений Темиргалеев [ Четверг, 09 Январь, 2014 14:58 ]
Заголовок сообщения:  Re: Как отобразить линейчатый спектр?

Попробуйте поглядеть примеры в http://www.zinnamturm.eu/downloadsDH.htm#Epse21. Может там уже есть?
Цитата:
Efficient Programming for Sciences and Engineering in the 21st Century.

This package of software helps novices (physicists) to start programming in Blackbox. It is the result of a would-be project "Efficient Programming for Sciences and Engineering in the 21st Century" which was discussed last summer, and whose first visible result is the Oberon Day 2004. I plan to add more examples there in future.

Epse21 uses the services of Ctls, Lib, Babel, Util, Plot and Datafit.

Автор:  Иван Денисов [ Четверг, 09 Январь, 2014 22:35 ]
Заголовок сообщения:  Re: Как отобразить линейчатый спектр?

Причесал свою программку для построяния спектров.
Вложение:
Спектропостроитель.7z [402.61 КБ]
Скачиваний: 311

Есть еще косяки, особенно с подписями плотных скоплений линий, но это нету уже энтузиазма и времени доделывать. Есть идея, что алгорим может быть связан с физической самоорганизацией, если каждой подписи присвоить потенциалы и вычислять эволюцию такой системы. Тогда подписи красиво выстроятся.
Еще я не заморачивался разными проверками на выходы за границы массивов и т.п. поэтому не больше 10 спектров, в каждом не больше 500 точек. Если надо больше, то нужно изменить соответствующие константы в модуле, чтобы не происходили аварийные остановки.

Управление переписал под скроллер мыши.
- просто скроллинг — прокрутка;
+ shift — приближение;
+ ctrl — толщина линий;
home — исходный размер.

Вложение:
demo.png
demo.png [ 50.1 КБ | Просмотров: 4776 ]


Панель управления вызвать возможно из меню Спектр → Панель управления или из документа Docu/Quick-Start.odc

А вот тут пример приложения, которое изображения позволяет анализировать:
http://molpit.com/?page=47

Автор:  Андрей Антошков [ Пятница, 10 Январь, 2014 13:14 ]
Заголовок сообщения:  Re: Как отобразить линейчатый спектр?

Иван, СПАСИБО большое. Постараюсь разобраться в программе!

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/