Трехмерная графика Решаем краевую задачу

Высшая математика
Решение задач
Понятие производной
Кратные и криволинейные интегралы
Два основных метода интегрирования
Вычисление двойного интеграла
Изменить порядок интегрирования
Примеры решения научно-технических задач
Математический анализ Предел функции
Производная и дифференциал интегрирование
Алгебра формулы
Информатика
Периферийные устройства в Linux
Конфигурирование системы Linux
Введение в систему команд Linux
Программное обеспечение ПК
Задание исходной функции
Аппроксимации рядом Тейлора
Моделирование физических явлений
Аппроксимация полиномами Чебышева
Эффективная оценка рациональных функций
Преобразование в код Фортрана или С
Движение частицы в магнитном поле
Разделение изотопов
Моделирование рассеивания альфа-частиц
Работа с документами в системе Maple
Браузеры Linux электронная почта и факс
Linux рабочая станция
Linux работа в сети Windows и Novel
Linux безопасность и связь сетей с Internet
Работа с трёхмерной графикой
Типы накопителей
Авторизация Категорирование
прав доступа
Некоторые сведения об архитектуре Windows
Графика OpenGL
Среда разработки Visual Studio
Трехмерная графика
Профилактика ПК
Электротехника
Maple для моделирования и расчета
электронных схем
Малосигнальный анализ усилителя
на полевом транзисторе
Расчет аналогового фильтра
Проектирование цифрового фильтра
Моделирование цепи на туннельном диоде
Применение интеграла Дюамеля
линейная алгебра
матричные операции
Пакет статистических расчетов
Регрессионный анализ
Пакет для студентов
Функции интегрирования
работа с таблицами
Физика
Энергетика
Термоядерный синтез
Реакторная технология
Атомные реакторы
История искусства
Архитектурное проектирование
Готическое искусство
Архитектура и живопись
Современный интерьер
русские усадебы
Естественность природы в интерьере
Монументальное и декоративное искусство
Масштаб произведения

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

  • Требования OpenGL Вместо тестового изображения с надписью ATL 4.0, которым мы научились кое-как управлять, поместим в окно СОМ-объекта OpenGL-изображение поверхности в трехмерном пространстве.
    • Введение методов в интерфейс lOpenGL На этом этапе важно решить, какие данные (свойства) и методы класса будут экспонироваться СОМ-объектом, а какие останутся в качестве служебных, для внутреннего пользования.
    • Ручная коррекция класса Класс COpenGL будет обслуживать окно внедренного СОМ-объекта. Он должен иметь достаточное количество данных и методов для управления изображаемой поверхностью, поэтому далее вручную введем сразу много изменений в файл с описанием класса COpenGL
    • Введение обработчиков сообщений Windows Наш объект, будучи активизирован в рамках окна контейнера, будет реагировать на сообщения Windows. Он должен управляться мышью, поддерживать вращение с помощью таймера, устанавливать нужный формат при создании своего окна и т. д.
    • Управление цветом фона Возможность изменять цвет фона окна OpenGL удобно реализовать с помощью отдельного метода класса
    • Подготовка сцены OpenGL Считая, что данные о координатах точек изображаемой поверхности уже известны и расположены в контейнере m_cPoints, напишем коды функции DrawScene, которая создает изображение поверхности и запоминает его в виде списка команд OpenGL.
    • Файловые операции Создание тестовой поверхности, чтение данных из файла и хранение этих данных в контейнере мы будем делать так же, как и в проекте MFC.
    • Установка освещения Параметры освещения будут изменяться с помощью регуляторов, которые мы разместим на новой странице блока Property Pages.
  • Страницы свойств Перед тем как мы начнем работать с окном СОМ-объекта, вводя в него реакции на управляющие воздействия, покажем, как добавить страницу свойств (property page) в уже существующий блок страниц объекта, который активизируется с помощью контекстного меню.
    • Конструируем облик страницы свойств Важным моментом в том, что произошло, когда вы добавили страницу свойств, является появление шаблона окна диалоговой вставки IDD_PROPDLG.
    • Взаимодействие классов Класс CPropDlg должен обеспечить реакцию на изменение регулировок, а класс COpenGL должен учесть новые установки и перерисовать изображение.
  • Создание контейнера на базе MFC До сих пор для отладки и демонстрации нашего ActiveX-элемента мы пользовались услугами тестового контейнера ActiveX Control Test Container,который входит в состав инструментов Studio.Net.

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

    • Использование STL В подобных ситуациях владение стандартными динамическими структурами данных и алгоритмами может сэкономить массу усилий, так как их разработчики уже выполнили большую часть неблагодарной черновой работы, тщательно отладили динамику жизни структур данных и все ветви алгоритмов.
      • Шаблоны STL — это библиотека шаблонов. Прежде всего вспомним, что такое шаблон. Различают шаблоны функций и шаблоны классов. Шаблон функций (function template) является средством языка C++, позволяющим избежать рутинного переписывания кодов функций, которые имеют сходный алгоритм, но разные типы параметров. Классическим примером, иллюстрирующим выгоды шаблона, является множество реализаций функции max (a, b) .
      • Шаблон функции быстрой сортировки Приведем пример реализации вышеупомянутого рекурсивного алгоритма сортировки массива переменных Quicksort. Его идея состоит в том, что меняются местами элементы массива, стоящие слева и справа от выбранного «центрального» (mid) элемента массива, если они нарушают порядок последовательности.
      • Шаблоны классов Шаблон классов (class template) в руководствах программиста иногда называется generic class или class generator. Шаблон действительно помогает компилятору сгенерировать определение конкретного класса по образу и подобию заданной схемы.
    • Контейнеры библиотеки STL Теперь, когда вы вспомнили, что такое шаблоны функций и шаблоны классов, мы можем исследовать возможности стандартной библиотеки шаблонов STL.
      • Последовательности типа vector Для их использования необходимо подключить файл заголовков <vector> и сделать доступным (видимым) стандартное (std) пространство имен
      • Поиск с помощью предиката Поиск первого объекта, который удовлетворяет условию, заданному предикатом, осуществляется с помощью шаблона функции f ind_if. В качестве третьего, параметра она требует задать имя функции-предиката.
      • Связыватели и адаптеры Связывателями (binders) называются вспомогательные шаблоны функций, которые создают некий объект (adaptor) , подстраивающий или преобразующий бинарный функциональный объект в унарный путем привязывания недостающего аргумента.
      • Последовательности типа deque Контейнер типа deque (очередь с двумя концами) похож на vector в том смысле, что допускает выбор элемента по индексу и делает это быстро.
      • Последовательности типа list Контейнеры типа list представляют собой двусвязные списки, то есть упорядоченные последовательности, допускающие проходы как вперед, так и назад. Операции вставки и удаления одинаково эффективны в любое место списка.
    • Ассоциативные контейнеры К ассоциативным контейнерам принадлежат: set, multiset, hash set, hash multiset, map, multimap, hash_map, hash_multimap. Они поддерживают эффективный поиск значений (values), связанных с ключом (key).
      • Контейнер типа set Множество (set) является ассоциативным контейнером, который хранит объекты типа key. В этом случае говорят о типе Simple Associative Container, имея в виду, что как value, так и key имеют один тип key.
      • Контейнеры типа тар Отображение (map) является сортируемым ассоциативным контейнером, который ассоциирует объекты типа key с объектами типа value. Map — это Pair Associative Container, так как он хранит пары типа pair<const Key, Data>.
      • Контейнеры типа hash_multimap Хешированный ассоциативный контейнер типа hash_multimap основан на встроенной реализации хэш-таблиц.
      • Стек — это адаптер (container adaptor), который предоставляет ограниченное подмножество всей функциональности контейнера. Термин адаптер в применении к структуре данных STL означает, что она реализована на основе какой-то другой структуры.
      • Контейнеры типа queue Очередь — это тоже,адаптер, который предоставляет ограниченное подмножество функциональности контейнера. Говорят, что очередь — это структура данных с дисциплиной доступа "first in first out" (FIFO).
      • Контейнеры типа priority_queue Очередь с приоритетами тоже является адаптером, который позволяет вставку элементов, инспекцию и удаление верхнего (top) элемента. Она не допускает итераций прохода по своим элементам.
      • Работа с потоками Шаблон класса if stream позволяет работать с файловыми потоками и производить ввод объектов произвольного типа. Удобно вводить объекты прямо в контейнер.
      • Примеры использования string Шаблон basic_string предоставляет типы и методы, схожие с теми, что предоставляют стандартные контейнеры, но он имеет много специфических методов, которые позволяют достаточно гибко манипулировать как строками, так и их частями (подстроками).
      • Полезные константы STL имеет много полезных констант. Проверьте свои знания основ информатики. Знаете ли вы смысл констант, приведенных ниже? Для их использования вам потребуется подключить такие файлы заголовков
      • Шаблон классов valarray Этот шаблон разработан для оптимизации вычислений, производимых над массивами чисел фиксиррванного размера. Valarray похож на контейнер, но он им не является.
      • Сечения массива Проблемы оптимизации работы с матрицами давно волнуют создателей компиляторов. В то далекое время, когда решения задач электродинамики и вообще краевых задач матфизики еще интересовали влиятельных людей нашей страны (скорее, научные авторитеты убеждали их, что такие задачи следует решать), мы, используя язык PL/I или FORTRAN, конечно же, хранили и обрабатывали матрицы в одномерных массивах.

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

  • Пример с матрицей МКР Для начала рассмотрим пример использования valarray л его сечения в задаче, более близкой к жизни, чем все другие учебные примеры, приводившиеся ранее.
    • Формирование матрицы Учитывая сказанное, создадим программный модуль, который позволяет проверить наши возможности управления последовательностью valarray на примере задачи, близкой к реальности.
  • Метод прогонки Прогонкой называется модификация метода Гаусса для решения систем линейных алгебраических уравнений с трехдиагональной матрицей
    • Разработка SDI-приложения Создайте новый проект типа MFC Application и назовите его Heat, несмотря на то что наша задача немного переросла задачу расчета стационарного теплового поля.
    • Класс окна для отображения графика Откройте файл ChildView.cpp, который содержит коды реализации методов класса CChildView. Его имя содержит ложный намек на происхождение от CView.
    • Класс графика С помощью Studio.Net введите в состав проекта новый generic-класс CGraph, не указывая имени базового класса и не включая флажок Virtual destructor.
    • Конструктор С Graph Если вы поняли, что происходит в методе Scale, то дальнейшие манипуляции с данными графика не вызовут у вас затруднений. Рассмотрим конструктор класса CGraph.
    • Преобразование координат В контейнере точек графика, на который ссылается переменная m_Points, хранятся мировые координаты, то есть числа, заданные в тех единицах измерения, которыми пользуется исследователь, решающий дифференциальное уравнение.
    • Отображение графика График отображается в такой последовательности. Сначала рисуется ограничивающий прямоугольник (рамка), затем дважды вызывается функция Scale, которая подготавливает данные для разметки осей.
    • Вспомогательная функция Напомним, что идеи, заложенные в алгоритме выработки цифровой метки на оси графика, принадлежат Александру Калимову, а сам алгоритм разрабатывался при его активном участии.
    • Диалог для исследования решений Сейчас мы быстрыми темпами, не углубляясь в детали, создадим диалог, работающий в немодальном режиме и позволяющий исследовать решения уравнения Пуассона при разных значениях свойств среды, произвольном расположении источников поля и произвольных граничных условиях.

    Среда разработки Visual Studio

    Графика OpenGL Трехмерные графики функций

    Некоторые сведения об архитектуре Windows

  • Математика, физика, электротехника примеры решения задач Информатика