Автор работы: Пользователь скрыл имя, 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
FName – содержит имя файла с которого необходимо загрузить данные;
MasOut() – двухмерный выходной массив, данные.
Загрузили картины получившиеся в пункте 3 и 4 в соответствующие массивы. После чего необходимо передать данные процедуре Myar(ByVal TResol As Integer, ByVal MasIn1(,) As Byte, ByVal MasIn2(,) As Byte, ByRef MasOut(,) As Byte), где:
MasIn1(,), MasIn2(,) – двухмерные входные массивы, соответственно загруженным картинам;
MasOut(,) – двухмерный выходной массив содержащий картину совмещенных линий – муар.
Эта процедура попиксельно
сканирует обе картины и
Обработка изображения (поиск центров линий). Необходимо обработать картины полученные в пунктах 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().
Рассмотри интерфейс модуля model. При запуске программы мы увидим два окна, показаны на рисунке 4. Справа блок управления, слева окно отображения 3D мира. На странице «1.Общие» можно менять расширения для окна 3D-моделирования и растров – чем больше, тем точнее картинка.
Так же имеется функция перерасчета всех пунктов программы. Регуляторы нужны для изменения позиции наблюдения. Переходим на следующую вкладку.
На вкладке «2.Проектор и растр» можно выбрать исследуемую поверхность (один из семи вариантов: шар, плоскость, конус, цилиндр, пользовательский файл, синусоида).
Далее надо ввести параметры рабочего растра, такие как шаг полос, угол поворота вокруг центра, расстояние от проектора до плоскости. После нажатия на кнопку «Создать» программа синтезирует рабочий растр с заданными параметрами, корректирует его с учетом искажений из-за расходящихся лучей проектора, накладывает растр на объект. Получаем следующий вид (рисунок 5). Далее необходимо “сфотографировать” поверхность с проецированными линиями.
На вкладке «3.Камера», перед тем как сделать снимок, необходимо установить камеру в нужное место, это делается тремя регуляторами соответственно координатам в пространстве X,Y,Z. После нажатия на кнопку «Сделать снимок» программа создает вид с заданной позиции. Получаем картину вид спереди на рисунке 6.
Следующий этап создание мнимого растра, вкладка «4.Мнимый растр». Так же как и для рабочего растра задаем параметры мнимого растра, такие как шаг растра, угол поворота вокруг центра. После нажатия на кнопку «Создать» программа синтезирует растр с заданными параметрами. Справа на рисунке 7 показан пример.
Далее переходим к вкладке «5.ПК», получение самого муара. Для этого необходимо нажать кнопку «Муар», программа совмещает изображение снимка из камеры и мнимого растра.
Для вычислений высот необходимо нажать оставшиеся три кнопки: «центр полос изображения», «центр полос мнимого растра», «Муар центр полос».
На вкладке «Создание поверхности» производится создание файла с пользовательскими настройками поверхности (рисунок 9).
Для просмотра полученных картин необходимо запустить BMP Браузер соответствующей кнопкой.
После запуска BMP Браузера, слева выбирается необходимый ресурс, например можно посмотреть исходный рабочий растр (рисунок 10) или мнимый (рисунок 11).
Для облегчения операций обработки изображения муара переводится в режим оттенки черного. Муаровый эффект изображен на рисунке 12. Он получился в результате наложения мнимого растра на рисунке 10 на снимок исследуемой плоскости на рисунке 6.
Для вычисления центров полос найдем центры светлых полос снимка и мнимого растра. Получим рисунки 13.а и 13.б. Совместив их, получим муар центров линий на рисунке 13.в.
а)
б)
в)
В данном курсовом проекте был разработан алгоритм, который был реализован в программе моделирующий муаровый эффект. Проект был разработан на системе Pentium IV, 512Мб ОЗУ и видеокартой с поддержкой DX9.
Был разработан удобный программный интерфейс.
В программе были реализованы следующие функции - менять параметры объектного растра, проецировать растр на заданную поверхность, синтезировать мнимый растр; менять положение камеры и проектора в пространстве; производить первичную обработку линии сеток, моделировать муаровый эффект, расчет вершин.
Программа получилась много функциональной и гибкой, минимальные вмешательства могут кардинально преобразить продукт. Некоторые алгоритмы функционирования программы можно улучшить, например поиск центров полос, это может повысить точность измерения.
Программа требует основательной доработки подпрограммы вычисления вершин.
Листинг модуля «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
Информация о работе Разработка программы, моделирующая муаровый эффект