Разработка программы, моделирующей муаровый эффект

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 28.01.2014
Размер файла 1,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту

по дисциплине: «Проектирование микропроцессорных систем»

на тему: «Разработка программы, моделирующей муаровый эффект»

Задание на курсовое проектирование

Спроектировать и написать программу, моделирующую муаровый эффект, рассчитать вершины, построить исследуемую плоскость. В работе предполагается использование современного языка программирования Visual Basic 2005 и новых технологий DirectX 9.

Реферат

Курсовой проект содержит 80 страниц, 13 рисунков, 4 приложения, было использовано 5 источников.

МУАР, МУАРОВЫЙ ЭФФЕКТ, СЕТКИ, РАСТР, ОПТИЧЕСКАЯ ОСЬ, МАТЕМАТИЧЕСКАЯ МОДЕЛЬ, МОДЕЛИРОВАНИЕ, ТОПОЛОГИЯ ОБЪЕКТА, АЛГОРИТМ, ПРОГРАММА, МОДУЛЬ.

Объектом исследования является модель электронно-проекционного метода определения топологии объектов.

Цель исследования: изучение и разработка программного обеспечения для моделирования электронно-проекционного метода.

В процессе исследования и разработки модели электронно-проекционного метода использовались следующие программные приложения: Visual Basic 2005, DirectX 9.0с SDK, MathCAD 13, 3D Studio Max 6.0. Была разработана программа по моделированию муарового эффекта. Были получены различные муаровые картины.

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

Содержание

Введение 5

1. Муаровый эффект 6

1.1 Природа муарового эффекта 6

1.2 Классификация муаровых методов 8

1.3 Муаровые методы 10

1.4 Математическая модель исследования топологии поверхностей электронно-проекционным муаровым методом 15

2. Выбор аппаратно-программных средств разработки 19

3. Разработка программного обеспечения для моделирования муарового эффекта 20

3.1 Основной алгоритм программы, модулирующий муаровый эффект 20

3.2 Интерфейс программы 23

Заключение 33

Список использованных источников 34

Приложение А 35

Приложение Б 63

Приложение В 80

Приложение Г 81

Введение

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

В связи с развитием вычислительной техники получил распространение электронно-проекционный муаровый метод.

Для дальнейшего развития метода необходимы исследования. Особенно требуется анализ методов обработки муаровых картин для получения более точной информации о топологии исследуемой поверхности. Для этого необходимо собирать установку в минимальном комплекте (проектор, камера, ЭВМ) и проводить ряд экспериментов. Что бы уменьшить затраты на установку и проведения экспериментов, стоит разработать программу, которая будет моделировать муаровый эффект при заданных параметрах.

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

1. Муаровый эффект

1.1 Природа муарового эффекта

Муар - это картина, состоящая из чередующихся темных и светлых полос, возникающая при наложении двух или более решеток Френеля, состоящих из линий, точек или иных геометрических элементов. В повседневной жизни его можно наблюдать в шелковых тканях, которые получили аналогичное название. Явление это обусловлено ограниченной разрешающей способностью устройства наблюдения, будь то человек или камера. При наложении двух систем линий интенсивность света по поверхности изображение меняется, и это изменение интенсивности и является причиной возникновения муаровой картины.

На рисунке 1 показаны картины муаровых полос, возникающие при наложении двух сеток прямых параллельных линий одинакового шага, повернутых на небольшой угол одна относительно другой (рисунок 1.а), а также имеющих небольшую разность в шаге, наложенных параллельно (рисунок 1.б).

а) б)

Муаровый эффект

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

Центр темной муаровой полосы совпадает с точкой, в которой темная линия одной сетки перекрывает, светлую линию другой. Средняя интенсивность проходящего или отраженного света непрерывно меняется от первой точки ко второй (в зависимости от величины зазора). Расстояние между центрами двух соседних темных (или светлых) муаровых полос является шагом полос[1].

При наложении двух систем прямых параллельных линий одинакового шага, повернутых на небольшой угол одна относительно другой, середина темной муаровой полосы совпадает с тем местом, где темные линии обеих сеток накладываются одна на другую. Между линиями средняя интенсивность меняется линейно и составляет 0.5 для белой муаровой полосы и 0.0 для темной муаровой полосы при условии, что темные и светлые линии сеток имеют одинаковую ширину [1].

Вообще распределение интенсивности света между светлыми и темными линиями зависит от соотношения ширины светлых и темных линий сетки. Полосы наибольшего контраста, то есть наибольшей разности интенсивности света, проходящего через середины светлой и темной полос, получаются при одинаковой ширине светлых и темных линий. При любом соотношении ширины светлых и темных линий максимальная интенсивность получается в центре светлой муаровой полосы, что облегчает построение центральных линий полос при измерениях. Муаровый эффект, таким образом, есть оптическое явление, возникающее при механическом наложении сеток сравнительно крупного шага, частота которых гораздо меньше частоты световых волн. Физическая природа света (длина волны) не имеет в этом явлении особого значения, поэтому его иногда называют «механической интерференцией».

1.2 Классификация муаровых методов

Муаровый эффект может быть использован при исследовании перемещений и деформаций сложных механизмов и конструкций. В частности, на использовании этого эффекта основаны некоторые очень точные и чувствительные приборы для измерения деформаций (механические тензометры, использующие муаровый эффект). Однако больший интерес представляет получение топологии поверхностей, на основе которых возможно получение поля деформаций по поверхности исследуемого объекта. Здесь муаровый эффект позволяет создать по существу новый метод исследования деформаций, существенно дополняющий имеющиеся экспериментальные методы. Известно несколько методов муаровых полос, применяемых к исследованию перемещений и деформаций, различающихся видом сеток, используемых для образования картин муаровых полос, и характером решаемых задач.

Сетка наносится непосредственно на исследуемую поверхность детали.

Нанесенная на экране сетка отражается от зеркальной поверхности исследуемого объекта.

Сетка с помощью проекционного устройства проектируется на поверхность исследуемого объекта.

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

В качестве сеток используются семейства линий оптической интерференции.

Используется изображение сетки, искаженное в результате преломления при прохождении света через прозрачную исследуемую деталь.

Необходимо отметить, что если первые два метода получили уже широкое применение, то остальные имеют пока незначительное распространение.

Все перечисленные выше методы исследования деформаций имеют много общего, поэтому их можно рассматривать как разновидности метода муаровых полос. Общим для них, прежде всего, является использование картин муаровых полос, возникающих в результате механического наложения систем сеток. Наиболее удобным вариантом являются проецируемые сетки. Искажение (деформация) одной (или обеих) из налагаемых сеток связано с деформациями исследуемой поверхности. Возникающие муаровые полосы являются линиями уровня некоторых геометрических величин (перемещений, углов наклона, прогибов, кривизны и так далее, или их комбинаций). Исследуемая величина оказывается заданной в виде картины своих линий уровня. Вдоль линий уровня она остается постоянной, а при переходе от одной муаровой полосы к соседней изменяется на некоторую постоянную величину.

Все операции, связанные с обработкой муаровых картин являются общими для всех методов, а именно:

определение линий, вдоль которых частные производные функции обращаются в нуль и которые разделяют всю исследуемую область на области с одинаковым знаком производных;

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

способы графического или численного дифференцирования и интегрирования функций;

способ определения частных производных путем наложения со сдвигом в направлении дифференцирования изображений линий уровня функции (механическое дифференцирование);

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

Общими для всех указанных выше методов являются экспериментальные способы получения картин муаровых полос:

двукратное фотографирование сетки до и после деформирования;

фотографирование картины муаровых полос, наблюдаемой непосредственно в процессе эксперимента путем наложения эталонной сетки или на поверхности детали, или на матовое стекло фотоаппарата;

полученные картины муаровых полос после проведения эксперимента путем наложения;

электронная обработка.

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

1.3 Муаровые методы

А) Метод муаровых полос с использованием сетки, нанесенной на деталь. Сущность метода состоит в том, что сетка линий наносится непосредственно на поверхность исследуемой детали и деформируется вместе с поверхностью. При наложении изображений сеток до и после деформации возникает картина муаровых полос. Наложение осуществляется или фотографированием деформированной сетки через недеформированную «эталонную» сетку, нанесенную на прозрачную пластинку и наложенную на поверхность детали, или фотографированием сетки, нанесенной на поверхность детали до и после деформации на один и тот же или на различные негативы. При этом можно использовать как отраженный, так и проходящий (в случае прозрачной детали) свет. Вообще говоря, могут быть использованы различные семейства линий, нанесенные на поверхность деталей сложной формы. Однако наиболее просто определяются деформации плоских поверхностей, на которые нанесены сетки прямых параллельных линий. Этот случай представляет наибольший практический интерес.

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

Б) Метод муаровых полос с использованием отраженной сетки. Если нанести на экран сетку прямых параллельных линий и сфотографировать отражение этой сетки сначала от плоской зеркальной поверхности, а затем от искривленной на один и тот же негатив, то в результате наложения двух семейств отраженных линий образуется картина муаровых полос, по которой можно судить о характере искривления поверхности. Графическим или численным интегрированием углов можно определить профиль поверхности (то есть расстояния по вертикали между различными точками поверхности или точками поверхности и некоторой отсчетной плоскостью). Метод позволяет определять углы поворота нормали, кривизны и профили слабоизогнутых поверхностей.

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

Этот метод является естественным развитием зеркально-оптических методов исследования углов и метода отраженной сетки. Зеркально-оптический метод точного измерения углов известен очень давно. При повороте плоского зеркала на небольшой угол, выбрав соответствующий «оптический рычаг» (расстояние от зеркала до некоторой отсчетной шкалы, по которой перемещается отраженный от зеркала луч) и измерив перемещение отраженного луча, можно определить величину угла поворота зеркала практически с любой требуемой точностью. Этот принцип используется как для непосредственного измерения углов, так и в различных измерительных приборах, например, зеркально-оптическом тензометре.

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

Сетка проецируется с помощью проектора на поверхность исследуемой детали и отражается от нее на экран, покрытый светочувствительной фотобумагой. Наложенные отражения сетки до и после нагружения детали образуют картину муаровых полос, которые, как и в методе Лигтенберга (схемы различаются лишь направлением хода лучей), являются линиями уровня углов поворота нормали к исследуемой поверхности. Данный метод так же, как и предыдущий, применим для исследования изгиба пластин и изогнутых поверхностей, и формулы для подсчета углов, кривизны и прогибов поверхности по картинам муаровых полос совершенно аналогичны.

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

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

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

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

Функциональная схема

Цифрами обозначены следующие элементы системы:

Исследуемая поверхность;

Цифровая фотокамера;

Мультимедийный проектор;

Компьютер.

ЭВМ синтезирует решетку с заданными параметрами, после чего подготовленная сетка проецируется на объект мультимедийным проектором

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

Заключительным этапом обработки является расчет высот, расстояний от плоскости мнимого растра до соответствующих точек поверхности объекта.

Таким образом; получаем дискретную картину топологии поверхности.

Следует еще раз отметить, что данная система на любом этапе работает с дискретными значениями, а используемые растры рабочий и мнимый по сути виртуальны. Это немаловажная деталь при разработке математической модели.

1.4 Математическая модель исследования топологии поверхностей электронно-проекционным муаровым методом

Перейдем к описанию математической стороны метода.

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

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

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

Оптическая модель

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

Рассмотрим, как формируются координаты точек центров темных мнимого растра в зависимости от параметров r, б, d и шага полос рабочего растра s.

Определим угол в как угол между оптическими осями проектора и камеры. Тогда в = 90° - б.

Координаты центров:

где

,

.

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

После обработки объектного растра мы получаем значения центров светлых полос и для извлечения информации о топологии поверхности, сравниваем координаты центров полос мнимого растра и объектного. В этих точках интенсивность света равна нулю - это и есть центры муаровых полос. Значения высот вычисляются по формуле:

, при

, при .

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

2. Выбор аппаратно-программных средств разработки

Сейчас доступно множество средств разработки приложений по моделированию, выбор встал на следующем программном обеспечение:

Новые технологии позволяют использовать модули, написанные на разных языках программирования, в одной программе[5]. Эту технологию поддерживает Microsoft Visual Studio .NET 2005 в состав которой входит Visual Basic 2005. VB 2005 - язык программирования высокого уровня, отвечает всем требованиям безопасности приложений, современный, легко изменяемый код, объектно-ориентированное программирование и работа с 3D_приложениями дает новые возможности по созданию высокотехничных приложений.

Средство 3D-моделирования DirectX 9.0c, использует современные наработки, обеспечивает связь между средством программирования и драйвером видеокарты. Компонент Direct3D обеспечивает широкие возможности при построении 3Д пространство.

Пакет Microsoft .Net Framework необходим для корректного функционирования программ написанных на VB 2005 или выше. Включает в себя ряд компонентов, таких как компиляторов, программ тестирования и защиты приложений.

Для быстрой и надежной работы выбранного программного обеспечения необходим современный компьютер. Требования к аппаратной части:

Системный блок со следующими характеристиками:

Процессор Intel Pentium IV 2.0ГГц

Оперативной памяти 256Мб

Свободное место на жестком диске 100Мб

Видеокарта NVidia GeforceFX5200 128Мб с поддержкой DirectX9.0

Монитор с поддержкой расширения не меньше чем 800x600x24

3. Разработка программного обеспечения для моделирования муарового эффекта

Проект разработан в Visual Basic 7.0 [3]. Программное обеспечение для гибкости состоит из трех модулей:

model - модуль графического интерфейса и управления, расчета;

rendering - модуль, работающий с 3Д миром;

bmpbrowser - модуль для отображения растровых данных.

Основная программа находится в модуле model. Это позволяет менять, другие модули не затрагивая основной, а так же упрощает добавление новых функций, изменение старых, настройки программы. В модуль model можно легко добавить новые возможности, пункты в меню и функциональные элементы, соответствующие данному пункту. А так же возможность создания других модулей.

3.1 Основной алгоритм программы, модулирующий муаровый эффект

Последовательность действий:

Создаем рабочий растр с заданным углом поворота вокруг центра растра и шагом линий. Этот пункт выполняется вызовом функций CreatLine(ByVal TResol As Byte, ByRef Mas2D(,) As Byte, ByVal Stp As Integer, ByVal Pix4 As Integer, ByVal Alpha As Single), где:

TResol - выбор разрешающей способности, соответствует элементам массивов fWidth() и fHeight(), текущее разрешение хранится в нулевой ячейке;

Mas2D(,) - двухмерный выходной массив, объектный растр;

Stp - шаг растра;

Pix4 - длина шаг черных полос, в текущем проекте Pix4 = Stp/2;

Alpha - угол поворота задается в градусах.

Затем данные из массива сохраняется в bmp-файле с помощью процедуры SaveToFile(ByVal TResol As Byte, ByVal Mas2D(,) As Byte, ByVal FName As String), где :

Tresol - выбор разрешающей способности;

Mas2D(,) - двухмерный массив, является входным параметром, объектный растр;

Fname - переменная содержащая имя файла, в который необходимо сохранить.

Накладываем его на объект с позиции проектора. Перед этим используя процедуру Camera() получаем растр с учетом искажений. Процедура имеет следующие параметры Camera(ByVal TResol As Byte, ByVal Mas2D(,) As Byte, ByRef MasCam(,) As Byte, ByVal h As Integer), где:

Mas2D(,) - двухмерный массив, является входным параметром, объектный растр;

MasCam(,) - двухмерный массив, является выходным параметром, растр с учетом искажений;

h - расстояние от проектора до поверхности.

Так же данные из MasCam(,) сохраняются в bmp-файл, процедурой SaveToFile(). После чего переменную NewRast устанавливаем в положение True, это означает, что модуль rendering должен принять новый рабочий растр и наложить его на объект(поверхность). Поверхность создается, процедурой CreateVertexBuffer(ByVal sender As Object), где sender - это объект VertexBuffer(набор вершин примитивов).

“Снимаем” камерой образовавшиеся линии. Для этого передаем управление модулю rendering, с помощью переменной createcameraview = True. Модуль rendering устанавливает вид с позиции камеры и, используя соответствующую команду Direct3D.SurfaceLoader.Save(), сохраняем содержимое слоя (видимая часть) в файл с расширением bmp.

Создаем мнимый растр с заданным углом, шагом и “снятие” его на камеру в плоскости перпендикулярной оптической оси проектора. Этот пункт аналогичен первому этапу, только входные и выходные данные относятся к мнимому растру. После создания файла с мнимым растром необходимо передать модулю rendering необходимость смоделировать его, это делается с помощью переменных createcameraviewM=True и операций аналогичных пункту 3. Результат получаем bmp-файл с эталонным растром.

Получения муаровой картины (наложением). Для этого необходимо загрузить с помощью процедуры LoadFromFile(ByVal TResol As Byte, ByVal FName As String, ByRef MasOut(,) As Byte), где:

FName - содержит имя файла с которого необходимо загрузить данные;

MasOut() - двухмерный выходной массив, данные.

Загрузили картины получившиеся в пункте 3 и 4 в соответствующие массивы. После чего необходимо передать данные процедуре Myar(ByVal TResol As Integer, ByVal MasIn1(,) As Byte, ByVal MasIn2(,) As Byte, ByRef MasOut(,) As Byte), где:

MasIn1(,), MasIn2(,) - двухмерные входные массивы, соответственно загруженным картинам;

MasOut(,) - двухмерный выходной массив содержащий картину совмещенных линий - муар.

Эта процедура попиксельно сканирует обе картины и результирует в выходной массив. После получения муара, его сохраняем с помощью процедуры SaveToFile(), описанной выше.

Обработка изображения (поиск центров линий). Необходимо обработать картины полученные в пунктах 3 и 4. Так же как и в пункте 5 необходимо с начало загрузить данные из файлов с помощью функции LoadFromFile(). Затем используя процедуру поиска линий CenterLine (ByVal TResol As Byte, ByVal MasIn(,) As Byte, ByRef MasOut(,) As Byte, ByVal Alpha As Integer), где:

MasIn(,), MasOut(,) - двухмерные массивы данных вход / выход соответственно;

Alpha(,) - угол наклона растра, задается для определения метода поиска центров полос.

Далее выходные массивы подаются на вход процедуре Myar() в итоге получаем муар центров полос. Все выходные массивы сохраняются в bmp-файл с помощью команды SaveToFile().

Вычисляем высоты исследуемой поверхности.

3.2 Интерфейс программы

Рассмотри интерфейс модуля model. При запуске программы мы увидим два окна, показаны на рисунке 4. Справа блок управления, слева окно отображения 3D мира. На странице «1.Общие» можно менять расширения для окна 3D_моделирования и растров - чем больше, тем точнее картинка.

Вкладка «1.Общие»

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

На вкладке «2.Проектор и растр» можно выбрать исследуемую поверхность (один из семи вариантов: шар, плоскость, конус, цилиндр, пользовательский файл, синусоида).

Вкладка «2.Проектор и растр»

Далее надо ввести параметры рабочего растра, такие как шаг полос, угол поворота вокруг центра, расстояние от проектора до плоскости. После нажатия на кнопку «Создать» программа синтезирует рабочий растр с заданными параметрами, корректирует его с учетом искажений из-за расходящихся лучей проектора, накладывает растр на объект. Получаем следующий вид (рисунок 5). Далее необходимо “сфотографировать” поверхность с проецированными линиями.

Вкладка «3.Камера»

На вкладке «3.Камера», перед тем как сделать снимок, необходимо установить камеру в нужное место, это делается тремя регуляторами соответственно координатам в пространстве X,Y,Z. После нажатия на кнопку «Сделать снимок» программа создает вид с заданной позиции. Получаем картину вид спереди на рисунке 6.

Следующий этап создание мнимого растра, вкладка «4.Мнимый растр». Так же как и для рабочего растра задаем параметры мнимого растра, такие как шаг растра, угол поворота вокруг центра. После нажатия на кнопку «Создать» программа синтезирует растр с заданными параметрами. Справа на рисунке 7 показан пример.

Далее переходим к вкладке «5.ПК», получение самого муара. Для этого необходимо нажать кнопку «Муар», программа совмещает изображение снимка из камеры и мнимого растра.

Вкладка «4.Мнимый растр»

Вкладка «5.ПК»

Для вычислений высот необходимо нажать оставшиеся три кнопки: «центр полос изображения», «центр полос мнимого растра», «Муар центр полос».

На вкладке «Создание поверхности» производится создание файла с пользовательскими настройками поверхности (рисунок 9).

Вкладка «Создание поверхности»

Для просмотра полученных картин необходимо запустить BMP Браузер соответствующей кнопкой.

После запуска BMP Браузера, слева выбирается необходимый ресурс, например можно посмотреть исходный рабочий растр (рисунок 10) или мнимый (рисунок 11).

Рабочий растр

Для облегчения операций обработки изображения муара переводится в режим оттенки черного. Муаровый эффект изображен на рисунке 12. Он получился в результате наложения мнимого растра на рисунке 10 на снимок исследуемой плоскости на рисунке 6.

программа муаровый эффект изображение

Мнимый растр

Для вычисления центров полос найдем центры светлых полос снимка и мнимого растра. Получим рисунки 13.а и 13.б. Совместив их, получим муар центров линий на рисунке 13.в.

Муаровый эффект

а)

б)

в)

Картины центров полос инвертирование

Заключение

В данном курсовом проекте был разработан алгоритм, который был реализован в программе моделирующий муаровый эффект. Проект был разработан на системе Pentium IV, 512Мб ОЗУ и видеокартой с поддержкой DX9.

Был разработан удобный программный интерфейс.

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

Программа получилась много функциональной и гибкой, минимальные вмешательства могут кардинально преобразить продукт. Некоторые алгоритмы функционирования программы можно улучшить, например поиск центров полос, это может повысить точность измерения.

Программа требует основательной доработки подпрограммы вычисления вершин.

Список использованных источников

Кузяков О.Н., Кучерюк В.И. Методы и средства измерения топологий поверхностей, перемещений и деформаций. - Тюмень: ТюмГНГУ,2002.-172с.

Основы 3D - http://softs.h10.ru

Microsoft Visual Basic 2005 - http://www.microsoft.com

Microsoft DirectX 9 SDK - http://www.microsoft.com

Microsoft Visual Studio .NET SDK - http://www.microsoft.com

Приложение А

Листинг модуля «Options.vb»

Imports System.Windows.Forms

Public Class Options

Inherits System.Windows.Forms.Form

Public Resel As Boolean = True

'Определяет было ли изменение вида поверхности

Public statW As String = "Show"

Переменная статуса окна 3d моделирования

Public savef As Boolean = False

Параметр сохранения окна 3d моделирования в файл

Public createcameraviewA As Byte = 0

Переменная создания кадров в автоматическом режиме

Public createcameraview As Boolean = False

Переменная создания кадра рабочей поверхности и сохранение в файл

Public createcameraviewM As Boolean = False

'Переменная создания кадра мнимой поверхности и сохранение в файл

Public refreshwindow As Boolean = False

Переменная состояния обновить окна 3d моделирования

Public MRast As Boolean = False

Переменная состояния обработки мнимого растра

Public NewRast As Boolean = False

Переменная состояния обработки рабочего растра

Public NewResolution As Boolean = False

Переменная состояния новое расширение

Public Face As Integer 'Номер поверхности

Public UserSur(1280 - 1, 960 - 1) As Int32 'массив пользовательской поверхности

Public SurSize As New RecSize 'размер пользовательской поверхности

Public Mas(1280, 960) As Byte 'рабочий растр

Public MasM(1280 - 1, 960 - 1) As Byte 'мнимый растр

Public Mas2(1280 - 1, 960 - 1) As Byte 'вид с проектора

Public Mas3(1280 - 1, 960 - 1) As Byte 'центры полос

Public Mas4(1280 - 1, 960 - 1) As Byte 'центры полос мнимой поверхности

Public MasC(1280 - 1, 960 - 1) As Byte 'Вид от камеры

Public MasCM(1280 - 1, 960 - 1) As Byte 'Вид от камеры м-растр

Public MasMyar(1280 - 1, 960 - 1) As Byte 'Вид муара

Public MasMyarC(1280 - 1, 960 - 1) As Byte 'Вид муар. центр линий

Public fWidth() As Integer = {400, 400, 640, 800, 1024, 1280} 'Поддерживаемые разрешения по X

Public fHeight() As Integer = {300, 300, 480, 600, 768, 960} 'Поддерживаемые разрешения по Y

Public fSize() As Single = {1, 1.6, 2, 2.56, 3.2}

Коэфициент маштабирования в зависимости от разрешения

Public SomeChange As Boolean = False 'Переменная состояния "что-то изменено"

Const FType As Int16 = &H4D42 'Константа BM - объевления тип файла BMP

Const XpM As Int32 = 10000

Const YpM As Int32 = 10000

Const bitperpix As Byte = 24

Const Rez As Int16 = 0

Const Off As Int32 = &H36

Const HSize As Int32 = &H28

Const planes As Int16 = 1

Const Compr As Int32 = 0

Const ISize As Int32 = 0

Const CUsed As Int32 = 0

Const CImp As Int32 = 0

Const R1 As Byte = &HFF

Const G1 As Byte = &HFF

Const B1 As Byte = &HFF

Const R2 As Byte = 0

Const G2 As Byte = 0

Const B2 As Byte = 0

Const RR As Byte = &H0

'Все константы нужны для работы с файлами формата BMP

'Процедура создания растра с углом Alpha, шагом Stp, результат сохраняет в Mas2D(,)

Sub CreatLine(ByVal TResol As Byte, ByRef Mas2D(,) As Byte, ByVal Stp As Integer, ByVal Pix4 As Integer, ByVal Alpha As Single)

Dim maxx As Integer = fWidth(TResol) 'разрешение по X и У

Dim maxy As Integer = fHeight(TResol)

Dim xc As Integer = maxx \ 2 'центр X и Y

Dim yc As Integer = maxy \ 2

Dim ax, ay As Int16 'свободные переменные

Dim freevarible As Single

ProgressBar1.Maximum = maxy 'Показывать индикацию прогресса

'Цикл создания растра, производится сканирование по X и Y

'узнается, где находилась эта точка до вращения и затем

'определяется темная/светлая полоса

For ay = 0 To maxy - 1

For ax = 0 To maxx - 1

freevarible = yc + (ax - xc) * Math.Sin(-1 * Alpha / 180 * Math.PI) + (ay - yc) * Math.Cos(-1 * Alpha / 180 * Math.PI)

If Math.Abs((freevarible + yc + Pix4 \ 2) Mod Stp) >= Pix4 Then Mas2D(ax, ay) = &HFF Else Mas2D(ax, ay) = &H0

Next

ProgressBar1.Value = ay

Next

ProgressBar1.Value = 0

End Sub

'Процедура генерации поверхностей

Function Telo(ByVal axisX As Integer, ByVal axisY As Integer) As Single

Dim fs As Single = fSize(CB_Res.SelectedIndex)

'определяется ф-я маштабирования в зависимости от выбранного расширения

Dim axisZ As Single

Dim t1 As Single

axisZ = 0 плоскость

If (Face = 1) Then цилиндр1

If (axisX > -50 * fs) And (axisX < 50 * fs) Then

axisZ = Math.Sqrt((50 * fs) ^ 2 - axisX ^ 2)

End If

End If

If (Face = 2) Then цилиндр2

If (axisX > -100 * fs) And (axisX < 100 * fs) Then

axisZ = Math.Sqrt((100 * fs) ^ 2 - axisX ^ 2)

End If

End If

If (Face = 3) Then конус

axisZ = (100 * fs - Math.Sqrt(axisY ^ 2 + axisX ^ 2)) * 2

If axisZ < 0 Then

axisZ = 0

End If

End If

If (Face = 4) Then шар

t1 = (100 * fs) ^ 2 - axisY ^ 2 - axisX ^ 2

If t1 >= 0 Then

axisZ = Math.Sqrt(t1)

End If

End If

If (Face = 5) Then new

t1 = axisY ^ 2 + axisX ^ 2

If (t1 < (20 * fs) ^ 2) Then

axisZ = 100

End If

If (t1 > (20 * fs) ^ 2) And (t1 < (100 * fs) ^ 2) Then

axisZ = -Math.Sqrt(0.25 * t1 - (10 * fs) ^ 2) + 100

End If

End If

If (Face = 6) Then

Dim OffX As Integer = SurSize.X / 2

Dim OffY As Integer = SurSize.Y / 2

If (Math.Abs(axisX) <= OffX) And (Math.Abs(axisY) <= OffY) Then

axisZ = UserSur(axisX + OffX, axisY + OffY)

End If

End If

If (Face = 7) Then

Dim amp As Byte = NUDSyn.Value

axisZ = amp * Math.Cos(axisX * Math.PI / 50) + amp

End If

Return axisZ возращает значение высоты

End Function

'Процедура расчета искажений

Sub Camera(ByVal TResol As Byte, ByVal Mas2D(,) As Byte, ByRef MasCam(,) As Byte, ByVal h As Integer)

Dim maxx As Integer = fWidth(TResol) 'разрешение по X и У

Dim maxy As Integer = fHeight(TResol)

Dim xc As Integer = maxx \ 2 'центр X и Y

Dim yc As Integer = maxy \ 2

Dim ax, ay As Int16 'свободные переменные

Dim x1, y1 As Integer

Dim freevarible, az, thaz As Single

ProgressBar1.Maximum = fHeight(TResol)

'Цикл создания растра, производится сканирование по X и Y

'узнается, где должна находиться эта точка, затем, где она находится

For ay = 0 To maxy - 1

For ax = 0 To maxx - 1

az = Telo(ax - xc, ay - yc)

thaz = h - az

If thaz = 0 Then thaz = -0.000000000000001

x1 = ((ax - xc) * h) / thaz + xc

y1 = ((ay - yc) * h) / thaz + yc

If (x1 < fWidth(0)) And (y1 < fHeight(0)) And (x1 >= 0) And (y1 >= 0) Then

MasCam(ax, ay) = Mas2D(x1, y1)

Else : MasCam(ax, ay) = 0

End If

Next

ProgressBar1.Value = ay

Next

ProgressBar1.Value = 0

End Sub

'Процедура сохранения двух мерного массива Mas2D в файл с именем FName

Sub SaveToFile(ByVal TResol As Byte, ByVal Mas2D(,) As Byte, ByVal FName As String)

Dim FSize As Int32 = fWidth(TResol) * fHeight(TResol) * (bitperpix / 8) + Off

размер файла

Dim BitCount As Int16 = bitperpix количество бит на цвет

Dim fs As IO.FileStream = New IO.FileStream(FName, IO.FileMode.Create)

создание файла

Dim w As IO.BinaryWriter = New IO.BinaryWriter(fs)

открытие файла на запись

'Запись заголовка

w.Write(FType) 'Тип файла

w.Write(FSize) 'Размер

w.Write(Rez)

w.Write(Rez)

w.Write(Off) 'Смещение

w.Write(HSize) 'Размер заголовка

w.Write(fWidth(TResol)) 'Расширение по X

w.Write(fHeight(TResol)) по Y

w.Write(planes) число битовых плоскостей

w.Write(BitCount) 'число битов на пиксель

w.Write(Compr) 'способ упаковки 0 - отсутствует

w.Write(ISize) 'размер изображения

w.Write(XpM) 'количества точек на метр

w.Write(YpM) 'количества точек на метр

w.Write(CUsed) 'количества цветов использовано

w.Write(CImp) 'количества цветов нужно

Запись данных из массива в файл

Dim ax, ay As Int16

Dim i As Integer

ProgressBar1.Maximum = fHeight(TResol)

For ay = fHeight(TResol) - 1 To 0 Step -1

For ax = 0 To fWidth(TResol) - 1

w.Write(Mas2D(ax, ay)) 'R

w.Write(Mas2D(ax, ay)) 'G

w.Write(Mas2D(ax, ay)) 'B

Next

ProgressBar1.Value = ay

Next

ProgressBar1.Value = 0

w.Close() закрытие файла.

fs.Close()

End Sub

Процедура загрузки данных из BMP файла в массив.

Sub LoadFromFile(ByVal TResol As Byte, ByVal FName As String, ByRef MasOut(,) As Byte)

Dim fs As IO.FileStream = New IO.FileStream(FName, IO.FileMode.Open)

открытие файла

Dim r As IO.BinaryReader = New IO.BinaryReader(fs)

установка на чтение

r.BaseStream.Seek(&HA, IO.SeekOrigin.Begin)

Dim beginData As Int32

beginData = r.ReadInt32() чтение где начало данных

r.BaseStream.Seek(&H12, IO.SeekOrigin.Begin)

Dim MaxX, MaxY As Int32

MaxX = r.ReadInt32() чтение разрешение по X

MaxY = r.ReadInt32() по Y

r.BaseStream.Seek(&H1C, IO.SeekOrigin.Begin)

Dim BperP As Byte

BperP = r.ReadByte чтение количество bit на точку

Dim MasTemp(MaxX, MaxY) As Byte 'Создание временного массива

ClearMas(0, MasTemp) очистка массива

Dim b1, b2, b3, b4 As Integer

r.BaseStream.Seek(beginData, IO.SeekOrigin.Begin) переход на начало данных

'Чтение данных в массив

Dim x, y As Integer

For y = MaxY - 1 To 0 Step -1

For x = 0 To MaxX - 1

b1 = r.ReadByte

If BperP >= 16 Then b2 = r.ReadByte

If BperP >= 24 Then b3 = r.ReadByte

If BperP >= 32 Then b4 = r.ReadByte

MasTemp(x, y) = b1

Next

Next

первичная обработка данных

Dim lx, ly As Integer

lx = (MaxX - fWidth(TResol)) \ 2

ly = (MaxY - fHeight(TResol)) \ 2

For x = 0 To fWidth(TResol) - 1

For y = 0 To fHeight(TResol) - 1

MasOut(x, y) = MasTemp(lx + x, ly + y)

Next

Next

r.Close() закрытие файла

fs.Close()

End Sub

'Процеду выделения центров линий

Sub CenterLine(ByVal TResol As Byte, ByVal MasIn(,) As Byte, ByRef MasOut(,) As Byte, ByVal Alpha As Integer)

Dim ax, ay As Int16

Dim i As Integer

Dim ly As Integer

Dim Line As Boolean

Dim notdel As Boolean

Dim t As Integer

'Обнуление массива

For ax = 0 To fWidth(TResol) - 1

For ay = 0 To fHeight(TResol) - 1

MasOut(ax, ay) = 0

Next

Next

Если угол меньше 45 градусов то сканировать по Y

If Alpha <= 45 Then

For ax = 0 To fWidth(TResol) - 1

Line = False

ly = 0

For ay = 0 To fHeight(TResol) - 1

If (MasIn(ax, ay) >= 200) And (Line = False) Then =1

Line = True

ly = ay

ElseIf (MasIn(ax, ay) <= 100) And (Line = True) Then '=0

MasOut(ax, (ly + ay) \ 2) = &HFF

Line = False

ly = ay

End If

Next

Next

Else

Если угол больше 45 градусов то сканировать по X

For ay = 0 To fHeight(TResol) - 1

Line = False

ly = 0

For ax = 0 To fWidth(TResol) - 1

If (MasIn(ax, ay) >= 200) And (Line = False) Then =1

Line = True

ly = ay

ElseIf (MasIn(ax, ay) <= 100) And (Line = True) Then '=0

MasOut(ax, (ly + ay) \ 2) = &HFF

Line = False

ly = ay

End If

Next

Next

End If

End Sub

'Процедура очистки массива

Sub ClearMas(ByVal TResol As Integer, ByRef Mas(,) As Byte)

Dim ax, ay As Integer

For ax = 0 To fWidth(0) - 1

For ay = 0 To fHeight(0) - 1

MasC(ax, ay) = 0

Next

Next

End Sub

'Процедура создания мнимого растра

Sub CreatMRast()

LStatus.Text = "Создание м-растра"

ClearMas(0, MasM)

CreatLine(0, MasM, NumericUpDownMRS.Value, NumericUpDownMRS.Value - NumericUpDownMRS1.Value, NumericUpDownMRA.Value)

NumericUpDownMRS.Value шаг сетки

NumericUpDownMRS1.Value ширина темных полос

NumericUpDownMRA.Value угол поворота;

LStatus.Text = "Сохранение растра"

SaveToFile(0, MasM, ".\Мнимый растр.bmp")

End Sub

'Процедура получения муара

Sub Myar(ByVal TResol As Integer, ByVal MasIn1(,) As Byte, ByVal MasIn2(,) As Byte, ByRef MasOut(,) As Byte)

Dim ax, ay As Integer

For ax = 0 To fWidth(0) - 1

For ay = 0 To fHeight(0) - 1

If (MasIn1(ax, ay) > MasIn2(ax, ay)) Then

MasOut(ax, ay) = MasIn1(ax, ay)

Else

MasOut(ax, ay) = MasIn2(ax, ay)

End If

Next

Next

End Sub

'Процедура Центры линий рабочей поверхности

Sub Cwline()

ClearMas(0, MasC)

ClearMas(0, Mas3)

LoadFromFile(0, ".\Вид рабочей поверхности.bmp", MasC)

CenterLine(0, MasC, Mas3, NumericUpDown.Value)

SaveToFile(0, Mas3, ".\Центры линий рабочей поверхности.bmp")

End Sub

'Процедура Центры линий мнимой поверхности

Sub Cmline()

ClearMas(0, MasCM)

ClearMas(0, Mas4)

LoadFromFile(0, ".\Вид мнимой поверхности.bmp", MasCM)

CenterLine(0, MasCM, Mas4, Me.NumericUpDownMRA.Value)

SaveToFile(0, Mas4, ".\Центры линий мнимой поверхности.bmp")

End Sub

'Процедура получения муара центров линий

Sub MyarEffectLine()

ClearMas(0, Mas3)

ClearMas(0, Mas4)

ClearMas(0, MasMyarC)

LoadFromFile(0, ".\Центры линий рабочей поверхности.bmp", Mas3)

LoadFromFile(0, ".\Центры линий мнимой поверхности.bmp", Mas4)

Myar(0, Mas3, Mas4, MasMyarC)

SaveToFile(0, MasMyarC, ".\Муаровый эффект центров линий.bmp")

End Sub

'Процедура получения муара

Sub MyarEffect()

ClearMas(0, MasC)

ClearMas(0, MasCM)

ClearMas(0, MasMyar)

LoadFromFile(0, ".\Вид мнимой поверхности.bmp", MasCM)

LoadFromFile(0, ".\Вид рабочей поверхности.bmp", MasC)

Myar(0, MasC, MasCM, MasMyar)

SaveToFile(0, MasMyar, ".\Муаровый эффект.bmp")

End Sub

'Процедура авто создания муаров и поиска центров линий

Public Sub autocreatall()

Cwline()

Cmline()

MyarEffectLine()

MyarEffect()

End Sub

Private Sub Options_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

CB_Res.SelectedIndex = 0

CB_Pov.SelectedIndex = 0

Me.Location = New System.Drawing.Point(10, 0)

Me.TopMost = True

End Sub

Private Sub ButtonBMP(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click

statW = "CreateBMPbrowser"

End Sub

Private Sub TabControl1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TabControl1.SelectedIndexChanged

TabControl1.Refresh()

If CheckBoxAuto.Checked = True Then

If SomeChange = True Then

Button2_Click(sender, e)

CreatMRast()

createcameraviewA = 3

End If

SomeChange = False

End If

refreshwindow = True

End Sub

Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click

LoadFromFile(0, ".\Центры линий рабочей поверхности.bmp", Mas3)

LoadFromFile(0, ".\Центры линий мнимой поверхности.bmp", Mas4)

Dim h, cosf1, cosf2 As Double

Dim fs As IO.FileStream = New IO.FileStream("test", IO.FileMode.Create)

Dim w As IO.TextWriter = New IO.StreamWriter(fs)

Dim ax, ay As Integer

For ax = 0 To fWidth(0) - 1

For ay = 0 To fHeight(0) - 1

If (Mas3(ax, ay) = &HFF) And (Mas4(ax, ay) = &HFF) Then

cosf1 = NumericUpDownPZ.Value / Math.Sqrt(NumericUpDownPZ.Value ^ 2 + ax ^ 2 + ay ^ 2)

cosf2 = NumericUpDownCH.Value * Math.Cos(NumericUpDownCA.Value * Math.PI / 180) / Math.Sqrt(NumericUpDownCH.Value ^ 2 + ax ^ 2 + ay ^ 2 + 2 * ax * NumericUpDownCH.Value * Math.Cos(NumericUpDownCA.Value * Math.PI / 180))

h = NumericUpDownWRS.Value() / (Math.Tan(Math.Acos(cosf1)) + Math.Tan(Math.Acos(cosf2)))

w.WriteLine(" X:" + CStr(ax) + " Y:" + CStr(ay) + " H:" + CStr(h))

End If

Next

Next

w.Close()

fs.Close()

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Button2_Click(sender, e)

CreatMRast()

createcameraviewA = 3

LStatus.Text = ""

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

LStatus.Text = "Создание растра"

ClearMas(0, Mas)

CreatLine(0, Mas, NumericUpDownWRS.Value, NumericUpDownWRS.Value - NumericUpDownWRS1.Value, NumericUpDownWRA.Value)

LStatus.Text = "Сохранение растра"

SaveToFile(0, Mas, ".\Рабочий растр.bmp")

LStatus.Text = "Сохранение растра2"

ClearMas(0, Mas2)

Camera(0, Mas, Mas2, NumericUpDownPZ.Value * fWidth(0) / 16)

SaveToFile(0, Mas2, ".\Искажения рабочего растра.bmp")

NewRast = True

LStatus.Text = "Наложение растра"

refreshwindow = True

End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

createcameraview = True

refreshwindow = True

End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

CreatMRast()

createcameraview = True

createcameraviewM = True

MRast = True

LStatus.Text = "Наложение растра"

refreshwindow = True

LStatus.Text = ""

End Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

Cwline()

End Sub

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

Cmline()

End Sub

Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

MyarEffectLine()

End Sub

Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click

MyarEffect()

End Sub

Protected Overrides Sub Finalize() 'Процедура завершения

MyBase.Finalize()

End Sub

Private Sub NumericUpDownWRS_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDownWRS.ValueChanged

SomeChange = True

NumericUpDownWRS1.Value = NumericUpDownWRS.Value \ 2

End Sub

Private Sub NumericUpDownPZ_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDownPZ.ValueChanged

SomeChange = True

TrackBarPZ.Value = NumericUpDownPZ.Value

refreshwindow = True

End Sub

Private Sub TrackBarPZ_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBarPZ.Scroll

SomeChange = True

NumericUpDownPZ.Value = TrackBarPZ.Value

refreshwindow = True

End Sub

Private Sub TrackBarCX_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBarCX.Scroll

SomeChange = True

NumericUpDownCX.Value = TrackBarCX.Value

If CheckBox1.Checked Then

createcameraview = True

End If

refreshwindow = True

End Sub

Private Sub NumericUpDownCX_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDownCX.ValueChanged

SomeChange = True

TrackBarCX.Value = NumericUpDownCX.Value

NumericUpDownCH.Value = Math.Sqrt(NumericUpDownCX.Value ^ 2 + NumericUpDownCY.Value ^ 2 + NumericUpDownCZ.Value ^ 2)

NumericUpDownCA.Value = Math.Acos(NumericUpDownCZ.Value / Math.Sqrt(NumericUpDownCX.Value ^ 2 + NumericUpDownCY.Value ^ 2 + NumericUpDownCZ.Value ^ 2)) * 180 / Math.PI

If CheckBox1.Checked Then

createcameraview = True

End If

refreshwindow = True

End Sub

Private Sub TrackBarCY_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBarCY.Scroll

SomeChange = True

NumericUpDownCY.Value = TrackBarCY.Value

If CheckBox1.Checked Then

createcameraview = True

End If

refreshwindow = True

End Sub

Private Sub NumericUpDownCY_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDownCY.ValueChanged

SomeChange = True

TrackBarCY.Value = NumericUpDownCY.Value

NumericUpDownCH.Value = Math.Sqrt(NumericUpDownCX.Value ^ 2 + NumericUpDownCY.Value ^ 2 + NumericUpDownCZ.Value ^ 2)

NumericUpDownCA.Value = Math.Acos(NumericUpDownCZ.Value / Math.Sqrt(NumericUpDownCX.Value ^ 2 + NumericUpDownCY.Value ^ 2 + NumericUpDownCZ.Value ^ 2)) * 180 / Math.PI

If CheckBox1.Checked Then

createcameraview = True

End If

refreshwindow = True

End Sub

Private Sub TrackBarCZ_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBarCZ.Scroll

SomeChange = True

NumericUpDownCZ.Value = TrackBarCZ.Value

If CheckBox1.Checked Then

createcameraview = True

End If

refreshwindow = True

End Sub

Private Sub NumericUpDownCZ_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDownCZ.ValueChanged

SomeChange = True

TrackBarCZ.Value = NumericUpDownCZ.Value

NumericUpDownCH.Value = Math.Sqrt(NumericUpDownCX.Value ^ 2 + NumericUpDownCY.Value ^ 2 + NumericUpDownCZ.Value ^ 2)

NumericUpDownCA.Value = Math.Acos(NumericUpDownCZ.Value / Math.Sqrt(NumericUpDownCX.Value ^ 2 + NumericUpDownCY.Value ^ 2 + NumericUpDownCZ.Value ^ 2)) * 180 / Math.PI

If CheckBox1.Checked Then

createcameraview = True

End If

refreshwindow = True

End Sub

Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll, TrackBar3.Scroll, TrackBar2.Scroll

refreshwindow = True

End Sub

Private Sub NumericUpDownMRS1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDownMRS1.ValueChanged, NumericUpDown.ValueChanged, NumericUpDownMRA.ValueChanged, NumericUpDownWRA.ValueChanged


Подобные документы

  • Разработка и реализация программы расчета заданных функций на языке программирования VBA. Математическая модель, параметры и характеристики задачи, критерии оценки эффективности созданного модуля. Разработка алгоритма и тестирование программного модуля.

    курсовая работа [488,7 K], добавлен 08.09.2010

  • Разработка игровой программы, моделирующей поведение мяча в закрытом безвоздушном пространстве. Изменение значения гравитации и трения о стены. Интерфейс программы, ее основная форма. Блок-схема программы и ее основной код. Добавление третьего измерения.

    контрольная работа [111,1 K], добавлен 27.08.2012

  • Структура и основные операции коммерческого банка. Использование языка программирования Visual Basic for Application, математическая формулировка задачи. Разработка модуля программы расчёта кредитов и депозитов. Схема алгоритма выполнения программы.

    курсовая работа [2,9 M], добавлен 09.04.2012

  • Разработка алгоритма решения задачи численного интегрирования методом трапеции. Словесное описание и блок-схема разработанного алгоритма программы. Описание интерфейса, главного окна и основных форм программы. Проверка работоспособности программы.

    курсовая работа [1,4 M], добавлен 16.03.2012

  • Разработка эскизного и технического проектов программы, моделирующей игру "Кости". Постановка задачи, описание алгоритма; написание программы, организация входных и выходных данных; выбор программных средств; спецификация, текст, условия выполнения.

    курсовая работа [93,8 K], добавлен 11.02.2012

  • Методы обработки информации при решении прикладных задач. Математическая модель задачи. Блок-схема алгоритма программы. Компоненты, которые используются для работы в программе: элементы интерфейса; процедуры; операторы. Текст программы с пояснениями.

    курсовая работа [954,0 K], добавлен 07.01.2011

  • Сущность понятия "код блюда". Алгоритмы обучения и использования программы. Логика работы программы. Общий интерфейс программы. Последовательность обучения программе Lota+. Интерфейс программы в момент выбора параметров и получения общего результата.

    курсовая работа [563,6 K], добавлен 01.12.2009

  • Разработка программы, моделирующей процесс падения шариков в Доске Гальтона - приборе, наглядно иллюстрирующем некоторые законы теории вероятностей. Структура метода решения. Блок-схема меню программы. Процедуры, интерфейс, руководство пользователя.

    курсовая работа [1,4 M], добавлен 15.01.2013

  • Разработка алгоритма решения определенного интеграла методом трапеций для подынтегральной функции и моделирования задачи вынужденных колебаний без затухания. Описание интерфейса программы в среде Delphi и MathCad; идентификаторы, модули и приложения.

    курсовая работа [500,4 K], добавлен 28.05.2013

  • Анализ, математическая постановка задачи. Описание алгоритма работы основной программы. Детализация отдельных участков программы. Графический интерфейс программы "15". Описания используемых типов, глобальных переменных, процедур, функций. Процесс отладки.

    курсовая работа [48,8 K], добавлен 14.02.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.