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

Автор работы: Пользователь скрыл имя, 26 Января 2014 в 14:29, курсовая работа

Краткое описание

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

Содержание

Введение 5
1 Муаровый эффект 6
1.1 Природа муарового эффекта 6
1.2 Классификация муаровых методов 7
1.3 Муаровые методы 10
1.4 Математическая модель исследования топологии поверхностей электронно-проекционным муаровым методом 14
2 Выбор аппаратно-программных средств разработки 18
3 Разработка программного обеспечения для моделирования муарового эффекта 19
3.1 Основной алгоритм программы, модулирующий муаровый эффект 19
3.2 Интерфейс программы 22
Заключение 31
Список использованных источников 32

Прикрепленные файлы: 1 файл

Курсовой.doc

— 1.84 Мб (Скачать документ)
  1. “Снимаем” камерой образовавшиеся линии. Для этого передаем управление модулю rendering, с помощью переменной createcameraview = True. Модуль rendering устанавливает вид с позиции камеры и, используя соответствующую команду Direct3D.SurfaceLoader.Save(), сохраняем содержимое слоя (видимая часть) в файл с расширением bmp.
  2. Создаем мнимый растр с заданным углом, шагом и “снятие” его на камеру в плоскости перпендикулярной оптической оси проектора. Этот пункт аналогичен первому этапу, только входные и выходные данные относятся к мнимому растру. После создания файла с мнимым растром необходимо передать модулю rendering необходимость смоделировать его, это делается с помощью переменных createcameraviewM=True и операций аналогичных пункту 3. Результат получаем bmp-файл с эталонным растром.
  3. Получения муаровой картины (наложением). Для этого необходимо загрузить с помощью процедуры 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().

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

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

 

 

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

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

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

 

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

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

 

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

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

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

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

 

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

 

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

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

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

 

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

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

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

 

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

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

 

  1. Мнимый растр

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

 

 

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

 

а)

б)

в)

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

Заключение

 

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

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

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

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

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

 

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

 

  1. Кузяков О.Н., Кучерюк В.И. Методы и средства измерения топологий поверхностей, перемещений и деформаций. – Тюмень: ТюмГНГУ,2002.-172с.
  2. Основы 3D - http://softs.h10.ru
  3. Microsoft Visual Basic 2005 – http://www.microsoft.com
  4. Microsoft DirectX 9 SDK – http://www.microsoft.com
  5. 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

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