Разработка базы данных 3D-объектов системы проектирования интерьеров

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 06.03.2013
Размер файла 425,9 K

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

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

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

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение высшего профессионального образования «Московский государственный институт

электроники и математики»

(технический университет)

Кафедра "Вычислительная техника"

алгоритм трехмерный визуализация атрибут

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

к дипломному проекту

На тему «Разработка базы данных 3D-объектов системы проектирования интерьеров»

Студент Акимов Алексей Сергеевич

Руководитель дипломного проекта

Зыков Адольф Константинович

Москва 2009 г.

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

Аннотация

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

Характеристики дипломного проекта:

Объем составляет 132 страницы.

Количество графических материалов составляет 7 листов.

Количество литературных источников составляет 12 позиций.

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

Оглавление

  • 1. Введение
  • 2. Специальная часть
    • 2.1 Обзор предметной области
    • 2.2 Аналитический обзор аналогичных систем
      • 2.2.1 Arcon Eleco
      • 2.2.2 Autodesk 3ds Max 9
      • 2.2.4 Программа Базис-Мебельщик
    • 2.3 Требования к проекту
    • 2.4 Структура системы
      • 2.4.1 Блок подпрограмм по организации пользовательского интерфейса
      • 2.4.2 Блок подпрограмм по организации работы с двухмерными объектами
      • 2.4.3 Блок подпрограмм по организации работы с базами данных
      • 2.4.4 Блок подпрограмм по организации трехмерной визуализации
    • 2.5 Алгоритм трехмерной визуализации
      • 2.5.1 Этап выбора объекта
      • 2.5.2 Алгоритм создания объекта
      • 2.5.3 Создание файла формата *.x3d
      • 2.5.4 Запись в файл *.x3d
    • 2.6 Алгоритм работы с базами данных
    • 2.6.1 Классы разбора таблицы XML по элементам и атрибутам
      • 2.6.2 Универсальная подпрограмма по записи элементов и атрибутов из таблицы XML в различные массивы, в зависимости от раздела
      • 2.6.3 Подпрограммы частичного вывода элементов из таблицы XML на экран в зависимости от раздела
    • 2.7 Алгоритмы работы с двухмерными объектами
      • 2.7.1 Алгоритм по созданию точки в рабочей области
      • 2.7.2 Алгоритм по перемещению точки по рабочей области
      • 2.7.3 Подпрограммы по созданию и перерисовке линий между точками
      • 2.7.4 Подпрограмма по выделению объекта на рабочей области
      • 2.7.5 Подпрограммы по перемещению объектов по рабочему полю
      • 2.7.6 Подпрограммы по повороту объектов
      • 2.7.7 Алгоритм очистки рабочего поля
      • 2.7.8 Подпрограмма удаления выбранного объекта
    • 2.8 Оценка эффективности системы
  • 3. Экологическая часть и безопасность жизнедеятельности
    • 3.1 Исследование воздействия опасных и вредных факторов при эксплуатации ЭВМ и их воздействие на организм человека
    • 3.2 Способы защиты пользователей от опасных и вредных факторов
      • 3.2.1 Электрическая безопасность
      • 3.2.2 Пожарная безопасность
      • 3.2.3 Предельно допустимые значения излучений
    • 3.3 Эргономические требования к рабочему месту
  • 4. Заключение
    • 4.1 Анализ существующих систем
    • 4.2 Обеспечение согласования форматов обмена данными между интерактивным интерфейсом и трехмерными объектами
    • 4.3 Возможность добавления объектов
    • 4.4 Функция трехмерной визуализации
  • 5. Приложение 1. Текст программы
    • 5.1 Блок объявления переменных
    • 5.2 Блок синтаксического анализатора базы данных
    • 5.3 Блок основной программы
  • 6. Приложение 2. Руководство оператора
    • 6.1 Аннотация
    • 6.2 Назначение программы
    • 6.3 Условия выполнения программы
      • 6.3.1 Минимальный состав технических средств
      • 6.3.2 Минимальный состав программных средств
    • 6.4 Выполнение программы
      • 6.4.1 Загрузка и запуск программы
      • 6.4.2 Выполнение программы
      • 6.4.3 Завершение работы программы
  • 7. Список используемой литературы
  • 1. Введение
  • В наши дни, когда когда жизнь проходит в сумасшедшем ритме, компьютер стал занимать всё более ведущие роли в жизни человека. Ведь для получения информации, работы, торговли, развлечений чеовек всё более активно стал использовать компьютер.
  • На данный момент каждая уважающая фирма, предприятие , комерческое или государственное предприятие всё более активно используют веб-тхнологии, будь то сложный портал, или простой веб-сайт с указанием телефона и адрессами того или иного учреждения.
  • Современный мир активно развивается и времени подчас совсем не хватает, учитывая занятость людей и пробки, с которыми каждый волей не волей сталкивался, времени совсем не хватает, чтобы съездить скажем в магазин электронной техники, или в аэропорт чтобы купить билет. И это уже сейчас не важно! Нужную вам информацию или услугу вы всегда можете получить затратив на это минимум времени и усилий.
  • Это и определило мой выбор в сторону создания веб-ресурса, направленного в помощь людям скованным рамками времени, создания ресурса помогающего определиться в дизайне интерьера. Данный ресурс позволит сократить время, затраченное на решение данного вопроса, будет абсолютно интерактивным и, что самое главное, удаленным.
  • Передо мной стала задача разработать механизм преобразования двумерных изображений в трехмерные объекты. Было принято решение использовать специализированный язык програмирования для создания трехмерных объектов, который по синтаксису и организации кода схож с используемой базой данных.
  • Для разработки пользовательского интерфейса был выбран язык программирования, в котором существуют инструменты по работе с графикой, и базами данных. Данных интерфейс строиться на данных, полученных из базы, и реализует возможность создания, отображения и модификации объектов.
  • Преимуществом выбранного языка является его поддержка средой создания флеш-приложений. Данный формат широко распространен в интернет, что позволяет легко интегрировать его в веб-сайт.
  • 2. Специальная часть
  • 2.1 Обзор предметной области
  • Современный мир оставляет людям мало места для самовыражения, основная часть продукции выпускается не оригинальной, а массовой, потому и недорогой. Желание сделать своё жилище уникальным свойственно человеческой натуре, и потому дизайн интерьеров является довольно востребованной областью. Но довериться в этом вопросе сможет не каждый человек, да и не каждому это по карману.
  • Желание сделать всё самому у потребителей было всегда, только вот возможностей не было. Данная возможность появилась при появлении специализированных программных продуктов, посвященных данной тематике. Существует множество подобных программ, которые отличаются друг от друга предоставляемыми возможностями, системными требованиями, или попросту, дизайном интерфейса. Все они нацелены на выполнение главной задачи, а именно:
  • помочь пользователю в создании собственного дизайна интерьера
  • сделать процесс разработки быстрее и проще
  • Большая часть программ которые существуют на данный момент, локального метода использования. Требующие установки на компьютер для начала работы с ними. Что соответственно не всегда возможно реализовать.
  • На данный момент данный нашли способ устранить данный недостаток, были разработаны системы с удаленным доступом, где пользователю не надо устанавливать программу себе на компьютер, достаточно лишь зайти на сайт. Этот факт сокращает время, затраченное на поиск, скачивание и установку программы.
  • 2.2 Аналитический обзор аналогичных систем
  • В данный момент существует множество подобных систем. Проведем аналитический обзор их возможностей.
  • 2.2.1 Arcon Eleco
  • Новая версия программы Arcon Eleco +2007 Professional (Аркон Элеко 2007) предназначена для профессионального дизайна, проектирования и трехмерной визуализации. Программа позволяет сначала создать детально проработанный план помещения, а потом увидеть созданное помещение в объемном изображении. Это позволяет более наглядно обсуждать архитектурные идеи со своими коллегами, а также более эффективно общаться с клиентами.
  • В отличие от других программ, программа Аркон разрабатывалась именно для архитекторов для решения вопросов, связанных с созданием интерьеров различной степени сложности. На сегодняшний день в Европе Аркон используют более 20 000 профессиональных пользователей, большая часть из них - это профессиональные архитекторы и дизайнеры.
  • В режиме конструирования Вы можете оперативно создать 2D планы. При помощи простого перетаскивания мышкой создаются и размещаются Стены, Двери, Окна и другие элементы.
  • В программе Аркон можно создать дизайн спроектированного помещения, поработать с отдельно взятыми элементами и нанести надписи и размеры на плане. Спроектированное помещение можно посмотреть в высококачественном 3D изображении и осуществить виртуальную прогулку по созданному проекту.
  • В проекте можно использовать текстуры и предметы интерьера из библиотеки. Библиотека содержит более 1300 различных текстур и более 3000 объектов интерьера. Имеется возможность просмотреть созданные интерьеры и экстерьеры с фотореалистичным качеством.
  • Аркон позволяет увидеть тени от освещения. Программа поддерживает слудующие форматы: для импорта - DXF, DWG, HPG, PLT и 3DS; для экспорта - файлы в форматах DXF, 3D DXF, VRML, 3DS, ArCon object, O2C, MBA, ArCon Render студия, HPGL, EWM и PCF.
  • Возможности программы "Аркон"
  • Конструирование:
  • профессиональный дизайн и проектирование интерьеров
  • проектирование лестниц
  • проектирование подвесных потолков
  • расчет теней и освещения (высококачественный рендер)
  • стены с закруглениями
  • виртуальные стены (невидимые)
  • верхние/нижние балки
  • колонны/опоры
  • дизайн корпусной мебели
  • Ландшафт:
  • установка различных высот и наклонов местности
  • ландшафтный дизайн и проектирование зимних садов
  • Просмотр:
  • 2D/3D
  • произвольное перемещение в 3D
  • понорамные презентации
  • Импорт/Экспорт:
  • DXF, DWG, HPG, PLT, 3D DXF, VRML, 3DS, ArCon object, O2C, MBA, ArCon Render студия, HPGL, EWM и PCF
  • создание видео в формате AVI
  • поддержка o2c объектов
  • сохранение фотореалистичных картинок с лучевой трассировкой
  • экспорт o2c объектов
  • 2.2.2 Autodesk 3ds Max 9
  • Autodesk 3ds Max 9
  • Одним из самых мощных, на сегодняшний день, инструментов, предназначенных для трехмерной визуализации, является 3ds Max 9.
  • Совместимость 3ds Max 9 с новейшей 64-битной технологией позволяет пользователям иметь доступ к расширенной памяти. В идеале, это означает еще и значительно ускоренную производительность. Преимущества 64-битной технологии становятся очевиднее при работе с очень большими наборами данных или сложной анимацией. Другими словами, разницу заметят те, кто работает с десятками миллионов многоугольников.
  • Autodesk оптимизировала параметры оконного интерфейса под DirectX, что, в отличие от 64-битного обновления, уже видно сразу. Компания не только значительно улучшила отображение контуров окон, прямых и кривых линий, но также добавила новую возможность просмотра скрытых линий. Кроме того, компания обещает более быстрое взаимодействие. Однако, если вы предпочитаете пользоваться OpenGL, вам не повезло - увеличение скоростных характеристик возможно только с DirectX. Bitmap Proxy - это еще один заметный шаг вперед; с его помощью изображения с высоким разрешением подкачиваются на прокси-серверы с низким разрешением, при этом повышается скорость отображения и улучшается производительность в целом.
  • Многослойная анимация и характерные опции
  • 3ds Max уже признанно стала любимой программой по работе с анимацией и в версии 9 усиливает эту тенденцию, предоставляя улучшенные характерные опции и возможность работать с многослойной анимацией. Будучи схожими по концепции со слоями дисплея, анимационные слои упорядочивают анимационные данные так, что пользователи получают быстрый доступ к различным типам анимации. Вы можете создать дополнительные слои, включив организацию базовых типов анимации. Это реально экономит время, а, кроме того, является одним из лучших инструментов в данной версии.
  • Autodesk наладила Character Studio (функцию, появившуюся в 3ds Max версии 7), что улучшает работу при анимации «двуногих». Новые отдельные модели для пальцев на руках и ногах открывают аниматорам новые возможности, которые помогают в создании более естественной анимации. Новая опция гибкости двуногих позволяет частям изображения двигаться вдоль друг друга и создает рамки негативов. При анимации двуногих также имеются опции настройки внешности и важная опция истории произведенных действий.
  • Когда речь идет о сфере моделировании, то 3ds Max, по общему признанию, является одним из лидеров, хотя она и не самая, так скажем, «интуитивная». К счастью, я заметил видимые улучшения при работе с более мощным программным обеспечением. Также я заметил более быстрое редактирование второстепенных объектов при работе с трудоемкими моделями. Функция Booleans улучшает создание выстрелов и промахов, а ProBooleans улучшает шансы, предсказуемо создавая качественные ячейки. ProCutter - это отличное добавление для разборки моделей на части (особенно при создании взрывов) или, наоборот, для анимации соединяющихся воедино кусочков. Возможности бесконечны.
  • Модуль Hair («Волосы»), который появился в версии 8, сейчас стал частью интерфейса 3ds Max, поэтому можно создать стиль волос при помощи стандартных инструментов. К счастью, в Autodesk улучшили общее качество отображения волос и скорость передачи. Завершает новинки в моделировании улучшенное качество создания одежды, которое позволяет пользователям редактировать, не прибегая к моделированию, а также закрашивать деформации, что сейчас весьма ценно.
  • Хотя Autodesk значительно улучшила набор моделирующих инструментов в 3ds Max, в ней все еще недостает некоторых усовершенствованных инструментов, таких как продвинутое моделирование углов, которое есть в других приложениях. Не смотря на критику, при помощи 3ds Max возможно смоделировать любой вообразимый предмет.
  • Обзор Mental Ray
  • Воспроизведение в 3ds Max 9 также улучшено, благодаря обновлению mental ray 3.5. Теперь вы можете выбрать из множества новых фактур. Некоторые из них включают новые оттенки цвета для автомобилей и набор под названием "Архитектурные и композиционные фактуры", созданный с целью создания архитектурной визуализации (их можно использовать для различных целей). Некоторые опции создания фактур значительно экономят время, например, Ambient Occlusion, который имитирует графический изоморфизм (GI), а также округленные или скошенные края.
  • В интерфейсе mental ray помимо добавления новых опций для создания фактур также произошло значительное упрощение. Например, теперь вы можете видеть диалоговое окно Final Gather, пока идет процесс воспроизведения, что позволяет быстрее решать проблемы. Я был особенно поражен новой поддержкой mental ray для 3ds Maxs Sun and Sky system (система солнца и неба), которая показала фантастические результаты при затрате меньших усилий. А также обычно требующие много времени опции GI были объединены в одну модель отражения света, что ускорило работу.
  • В целом, главные улучшения в 3ds Max 9 - это увеличенная производительность и 64-битная совместимость. И только эти характеристики уже стоят того, чтобы увеличить цену. Но если вы также рассчитываете на лучшую анимацию и моделирование, обновление Mental Ray 3.5 и улучшения в линейке, управлении ресурсами и файловой совместимости, вы не ошибетесь, выбрав 3ds Max 9.
  • Спецификации
  • Программное обеспечение: требования для 32-битной операционной системы: Microsoft Windows XP Professional (рекомендован Service Pack 2 или выше) или Microsoft Windows 2000 Professional (Service Pack 4); требования для 64-битной операционной системы: Microsoft Windows XP Professional x64; требования для веб-браузера: Microsoft Internet Explorer 6 или выше; дополнительное программное обеспечение: DirectX 9.0c (обязательно), OpenGL (по выбору).
  • Аппаратное обеспечение: минимальные требования для 32-битной версии: Intel Pentium IV или AMD Athlon XP или более мощный процессор, 512 MB RAM (рекомендовано 1 GB), 500 MB свободного места (рекомендовано 2 GB), аппаратно-ускоренная поддержка OpenGL и Direct3D, поддерживающее Microsoft Windows координатно-указательное устройство (оптимизированное для Microsoft IntelliMouse), привод DVD-ROM.
  • Минимальные требования для 64-битной версии: Intel EM64T, AMD Athlon 64 или выше, процессор AMD Opteron; 1 GB RAM (рекомендовано 4 GB); 500 MB свободного места (рекомендовано 2 GB); аппаратно-ускоренная поддержка OpenGL и Direct3D; поддерживающее Microsoft Windows координатно-указательное устройство (оптимизированное для Microsoft IntelliMouse); привод DVD-ROM.
  • 2.2.3 Программа Наш Сад - ландшафтный дизайн
  • Удобная и функциональная программа для ландшафтного дизайна, с большими библиотеками объектов и возможностью добавления пользовательских текстур, позволяющая создавать как сложные ландшафтные проекты, так и проектировать собственный дачный участок.
  • 1. Качественная визуализация
  • 2. Калькулятор сметы
  • 3. Редактор ресурсов
  • 4. Лестницы
  • 5. Видео-презентации
  • 6. Редактор сезонных фотографий и текстур
  • 7. Редактор малых архитектурных форм
  • 8. Мощение
  • 9. Более 1000 3D-объектов и 3D-растений
  • 10. Создание и импорт 3D-моделей
  • 11. Редактор профилей
  • 12. Чертежные элементы
  • 13. Заборы
  • 14. Приподнятые поверхности
  • 15. Более 15 тыс. растений и более 26 тыс. их фотографий
  • 16. Совместим с Windows Vista
  • Стандартные системные требования Наш Сад 9.0 Рубин:
  • Операционная система Microsoft Windows XP, Windows Vista (программа не совместима с Windows XP x64);
  • Microsoft Internet Explorer 5.01 или более новый;
  • Процессор Pentium 4 (2GHz и выше);
  • Оперативная память RAM 512 MB (рекомендуется 1 GB или более);
  • Свободное место на жестком диске: 4 GB;
  • Видеокарта с 3D-ускорителем 128 MB RAM, драйвер с поддержкой OpenGL. Для сложной 3D графики нужна поддержка OpenGL 2.0 со стороны видеокарты и драйвера;
  • Монитор с установленным режимом 1024x768 16 млн цветов (24 или 32 бита на цвет);
  • DVD привод;
  • Разработчик: российская компания "ГеоС" (гарантированная техническая поддержка для зарегистрированных пользователей).
  • Имеется целый ряд программ, нацеленных на решение задачи дизайна интерьера. Но каждая из них имеет следующие особенности:
  • Довольно серьезные системные требования;
  • Сложный интерфейс;
  • Отсутствие возможности удаленной работы
  • 2.2.4 Программа Базис-Мебельщик
  • Комплексная автоматизация мебельного производства: проектирование мебели, дизайн мебели, а также программа раскроя
  • Базис-Мебельщик - это система, имеющая гибкую модульную структуру и предназначенная для автоматизации всех подразделений мебельного предприятия - конструкторского, производственного, экономического и торгового. Срок окупаемости системы на большинстве предприятий составляет от трех до девяти месяцев.
  • Один из основных принципов, заложенных в систему Базис-Мебельщик заключается в том, чтобы предоставить пользователю возможность максимальной адаптации системы под его специфику. После приобретения системы связь с разработчиками остается только на уровне консультаций и обучения. Все настройки (используемые материалы, фурнитура, технологические процессы, нормы выполнения операций и т.п.) пользователь выполняет сам по существующим методикам.
  • Система Базис-Мебельщик - универсальная, она позволяет работать с любой корпусной мебелью независимо от ее сложности: кухонной, офисной, мебелью для жилых комнат, гостиниц и пансионатов и т.д. При этом каждое спроектированное изделие может служить прототипом для новых изделий. Для этого в системе разработан специальный аппарат редактирования изделий.
  • Система Базис-Конструктор-Мебельщик находится на рынке уже более пяти лет, а ее прототип - система Базис-Конструктор - более пятнадцати.
  • У разработчика создана многоступенчатая сервисная служба, включающая в себя консультации по телефону и электронной почте, обучение, как на территории разработчика, так и на территории пользователя, региональные семинары. В настоящее время функционируют более десяти дилерских центров в России, Украине, Казахстане и других государствах, и их количество постоянно растет, как и количество пользователей системы. Таким образом, система Базис-Конструктор-Мебельщик служит хорошей основой реальной автоматизации мебельных предприятий.
  • Официальный представитель: компания ГрандСофт (Россия)
  • 2.3 Требования к проекту
  • Данный проект разрабатывается с целью повышения эффективности работы с программными продуктами, которые предназначены для дизайна интерьера, путем интеграции в веб-сайт, так как некоторые пользователи не хотят или не могут устанавливать на свой компьютер программы.
  • Основное требование, чтобы разрабатываемая система поддерживала идею трехмерной визуализации, что в свою очередь даст пользователю возможность увидеть более точный результат проектирования, близкий к реальности.
  • Проект должен иметь возможность добавления новых объектов в каталог. Для этого необходимо реализовать алгоритм работы с базами данных. Так же это облегчит хранение и изменение информации об объектах, пунктах меню и пользовательском интерфейсе.
  • Проэкт должен обеспечивать согласование форматов обмена данными между интерактивным интерфейсом и трехмерными объектами.
  • 2.4 Структура системы
  • Данная система включает в себя множество подпрограмм, которые имеют различное предназначение. Различаются они как по исходным данным, так и по возможности их применения. Все эти подпрограммы можно объединить в несколько групп:
  • Подпрограммы по организации работы с двухмерными объектами
  • Подпрограммы по организации работы с базами данных
  • Подпрограммы по организации трехмерной визуализации
  • Подпрограммы по организации пользовательского интерфейса
  • От действий пользователя напрямую зависит работы системы. Система управляется путём визуального интерфейса, с помощью запуска той или иной программы.
  • 2.4.1 Блок подпрограмм по организации пользовательского интерфейса
  • Блок подпрограмм по организации пользовательского интерфейса включает в себя:
  • Подпрограмма по рисованию сетки (рабочей области)
  • Алгоритм, отвечающий за распознавание положения указателя мыши
  • Алгоритм, отвечающий за нажатие на определенный пункт меню или элемент
  • Подпрограмма по выводу пунктов меню на экран
  • 2.4.2 Блок подпрограмм по организации работы с двухмерными объектами
  • Блок подпрограмм по организации работы с двухмерными объектами включает в себя несколько подпрограмм, таких как:
  • Алгоритм по созданию точки в рабочей области
  • Алгоритм по перемещению точки по рабочей области
  • Подпрограммы по созданию и перерисовке линий между точками
  • Подпрограмма по выделению объекта на рабочей области
  • Подпрограммы по перемещению объектов по рабочему полю
  • Подпрограммы по повороту объектов
  • Алгоритм очистки рабочего поля
  • Подпрограмма удаления выбранного объекта
  • 2.4.3 Блок подпрограмм по организации работы с базами данных
  • Этот блок включает в себя следующие подпрограммы:
  • Классы разбора таблицы XML по элементам и атрибутам
  • Универсальная подпрограмма по записи элементов и атрибутов из таблицы XML в различные массивы, в зависимости от раздела
  • Подпрограммы частичного вывода элементов из таблицы XML на экран в зависимости от раздела
  • 2.4.4 Блок подпрограмм по организации трехмерной визуализации
  • Данный блок включает в себя следующие подпрограммы и алгоритмы:
  • Этап выбора объекта
  • Алгоритм создания объекта
  • Создание файла формата *.x3d
  • Запись в файл *.x3d
  • 2.5 Алгоритм трехмерной визуализации
  • Трехмерная визуализация является одним из важнейших преимуществ, при создании программного продукта в области дизайна интерьеров. Для пользователя, использующего программный продукт с возможностью трехмерной визуализации, доступна функция увидеть готовый проект, в трехмерном виде, что ближе всего соотноситься с конечной, физической планировкой.
  • Трехмерная визуализация может быть реализована несколькими способами.
  • Одним этих способов может являться создание всех объектов в трехмерном редакторе заранее. В процессе выполнения программы данные объекты будут вставляться в определенные места в проекте. Данный метод может обеспечить более четкий, красивый и приятный вид объектов. Недостатком же такого метода является большой вес (объем в мегабайтах) объекта, что налагает определенные ограничения, например, при использовании в интернет проектах. Данный метод является ресурсоемким по времени создания новых моделей, а так же требует дополнительной производительности со стороны компьютера клиента.
  • Еще одним способом организации трехмерной визуализации является создание объектов программным путем, то есть непосредственно создание объекта в процессе работы программы. Объект может быть создан на стороне клиента, при локальной работе с программным продуктом. Также объект может быть создан на стороне сервера, при работе с удаленным программным продуктом. При создании объекта на стороне клиента, на его компьютер налагаются определенные требования по производительности. При создании объектов на стороне сервера, накладываются требования на пропускную способность принимающего интернет канала.
  • В данной работе используется новый метод трехмерной визуализации. Для реализации данного метода был выбран специализированный язык описания трехмерных объектов X3D (eXtensible 3D). Данный язык имеет несколько отличительных особенностей:
  • Возможность создавать сложные объекты
  • Работа с полигонами и двумерными объектами
  • Работа с текстом
  • Работа с текстурами
  • Создание освещения и анимации
  • Очень маленький объем (размер в мегабайтах) создаваемых объектов
  • Главной особенностью используемого языка является синтаксис. Синтаксис языка X3D схож с синтаксисом распространенного формата для хранения структурированных данных XML (eXtensible Markup Language).
  • В данном методе трехмерные объекты создаются заранее. Эти объекты и являются исходными данными алгоритма.
  • Алгоритм трехмерной визуализации делиться на несколько этапов, или процедур.
  • 2.5.1 Этап выбора объекта
  • function createobj (arr_visible_w_in:Array, arr_visible_h_in:Array) : Void {
  • tempobj.clear();
  • var w_in = arr_visible_w_in[select_number];
  • var h_in = arr_visible_h_in[select_number];
  • tempobj.beginFill(0x00FF00);
  • tempobj.moveTo(0, 0);
  • tempobj.lineTo(w_in, 0);
  • tempobj.lineTo(w_in, h_in);
  • tempobj.lineTo(0, h_in);
  • tempobj.lineTo(0, 0);
  • tempobj.endFill();
  • create_obj = true;
  • tempobj._x = _xmouse;
  • tempobj._y = _ymouse;
  • tempobj.startDrag();
  • };
  • Исходными данными на данном этапе являются:
  • Массив arr_visible_w_in - массив данных, который содержит числовые значения ширины выбранного элемента.
  • Массив arr_visible_h_in - массив данных, который содержит числовые значения длинны выбранного элемента.
  • Объект tempobj - объект типа MovieClip
  • Переменная select_number - переменная, содержащая числовое значение номера выбранного объекта.
  • Далее в объекте tempobj создается графический двумерный объект, по размерам, полученным из исходных данных (из элементов исходных массивов выбранного номера).
  • Логической переменной create_obj присваивается значение true, что обеспечит дальнейшую работу алгоритма.
  • Координаты объекта tempobj приравниваются к координатам мыши, и применяется функция startDrag(); (Функция startDrag() вызывает зрительное перемещение объекта за курсором мыши по экрану).
  • 2.5.2 Алгоритм создания объекта
  • if ((x <= max_wallcoordx)&&(x>=min_wallcoordx)&&(y >= min_wallcoordy)&&(y <= max_wallcoordy)&&(create_obj)) {
  • tempobj.stopDrag();
  • obj_on_pole += 1;
  • tempobj.duplicateMovieClip("obj" + obj_on_pole, 30 + obj_on_pole);
  • tempobj.clear();
  • arr_category[obj_on_pole] = category;
  • arr_obj_num[obj_on_pole] = arr_visible_i[select_number];
  • arr_obj_x[obj_on_pole] = (_root["obj" + obj_on_pole]._x)/10 - wmin/10 - center_pole_x;
  • arr_obj_y[obj_on_pole] = (_root["obj" + obj_on_pole]._y)/10 - hmin/10 - center_pole_y;
  • arr_obj_w[obj_on_pole] = arr_visible_w[select_number];
  • arr_obj_h[obj_on_pole] = arr_visible_h[select_number];
  • obj_center_rot_x = _root["obj" + obj_on_pole]._x;
  • obj_center_rot_y = _root["obj" + obj_on_pole]._y;
  • arr_rotation[obj_on_pole] = 0;
  • var cat_name = arr_category[obj_on_pole];
  • objx3d.load("objx3d/"+"obj" + cat_name + "_" + arr_obj_num[obj_on_pole] + ".x3d");
  • objx3d.onLoad = function(success:Boolean){
  • if(success){
  • arr_obj_string[obj_on_pole] = objx3d.toString();// converts dots XML object to a string and stores it in dotsToXMLString.
  • } else{
  • trace("Could not load XML");
  • }
  • }
  • create_obj = false;
  • menu_obj[4].enabled = true;
  • menu_obj[4]._alpha = 100;
  • menu_obj[15].enabled = true;
  • menu_obj[15]._alpha = 100;
  • menu_obj[16].enabled = true;
  • menu_obj[16]._alpha = 100;
  • menu_obj[17].enabled = true;
  • menu_obj[17]._alpha = 100;
  • menu_obj[18].enabled = false;
  • menu_obj[18]._alpha = 50;
  • };
  • Исходными данными на данном этапе являются:
  • Объект tempobj - объект типа MovieClip
  • Переменная obj_on_pole - содержащая числовое значение количества объектов в рабочем поле
  • Переменная category - содержащая числовой код выбранной категории товара
  • Переменная objx3d - переменная типа XML, в которую загружаются заранее созданные трехмерные объекты.
  • Массивы arr_category - массив данных, содержащий числовой код категории для создаваемого объекта
  • Массивы arr_obj_num - массив данных, содержащий порядковый номер создаваемого объекта в базе данных
  • Массивы arr_obj_x - массив данных, содержащий координату по x создаваемого объекта
  • Массивы arr_obj_y - массив данных, содержащий координату по y создаваемого объекта
  • Массивы arr_obj_h - массив данных, содержащий длину создаваемого объекта
  • Массивы arr_obj_w - массив данных, содержащий ширину создаваемого объекта
  • Массивы arr_rotation - массив данных, содержащий величину угла поворота создаваемого объекта
  • Массивы arr_visible_i - массив данных, содержащий порядковый номер выбранного элемента в базе данных
  • Массивы arr_visible_h - массив данных, содержащий длину выбранного элемента в базе данных
  • Массивы arr_visible_w - массив данных, содержащий ширину выбранного элемента в базе данных
  • Переменная select_number - переменная, содержащая числовое значение номера выбранного объекта.
  • Для того чтобы создать объект, необходимо, чтобы выполнялись следующие условия:
  • Логическая переменная create_obj должна иметь значение true
  • Курсор мыши должен находиться в области рисования
  • Если вышеуказанные условия выполняются, то программа приступает к созданию объекта. К объекту tempobj применяется функция stopDrag() (данная функция останавливает перетаскивание объекта по экрану). Переменной obj_on_pole приплюсовывается единица, то есть увеличивается количество объектов на рабочем поле. Из объекта tempobj создается дубликат с именем “obj” + obj_on_pole. Все параметры объекта tempobj дублируются для полученного объекта автоматически.
  • Элементам массивов arr_category, arr_obj_num, arr_obj_x, arr_obj_y, arr_obj_w, arr_obj_h, arr_rotation с номером obj_on_pole присваиваются начальные значения.
  • Создается временная переменная cat_name, которой присваивается элемент массива arr_category с номером obj_on_pole.
  • К объекту objx3d применяется функция load() (функция загружает в объект типа XML файл, который находиться по указанному адресу). Отслеживается загрузка файла функцией onLoad() (функция возвращает значение логической переменной, значение которой зависит удачной или не удачной загрузки). Если загрузка прошли успешно, то элементу массива arr_obj_string с номером obj_on_pole присваивается результирующее значение функции toString(), примененной к объекту objx3d (функция toString преобразовывает содержимое объекта типа XML в строку).
  • Последним шагом данного этапа является присвоение логической переменной create_obj значение false, что обезопасит от создания объекта повторно.
  • 2.5.3 Создание файла формата *.x3d
  • if ((menu_obj_flag[15])&&(obj_on_pole != 0)) {
  • obj_string = "<X3D><Scane><Group><Viewpoint centerOfRotation" + chr(61) + chr(34) + "0 0 0" + chr(34) + "/>";
  • for (var n_i = 1; n_i <= obj_on_pole; n_i++) {
  • obj_string = obj_string + "<Transform translation" + chr(61) + chr(34) + int((arr_obj_x[n_i])*10)/10 + " " + int((arr_obj_y[n_i])*10)/10 + " " + "0" + chr(34) + " " + "rotation" + chr(61) + chr(34) + "0 0 " + int((arr_rotation[n_i])*100)/100 + " " + "1" + chr(34) + ">";
  • obj_string = obj_string + arr_obj_string[n_i];
  • if (n_i != obj_on_pole) {
  • obj_string = obj_string + "</Transform></Group><Group>";
  • }
  • };
  • obj_string = obj_string + "</Transform></Group></Scane></X3D>"
  • menu_obj_flag[15] = false;
  • loadVariables("writetofile.php", "", "POST");
  • getURL("writetofile.php", "_blank")
  • file_created = true;
  • menu_obj[15].enabled = false;
  • menu_obj[15]._alpha = 50;
  • menu_obj[18].enabled = true;
  • menu_obj[18]._alpha = 100;
  • };
  • Исходными данными на данном этапе являются:
  • Массив логических переменных menu_obj_flag - массив, содержащий информацию о том, какая кнопка была нажата пользователем.
  • Переменная obj_on_pole - содержащая числовое значение количества объектов в рабочем поле.
  • Массив arr_obj_string - массив данных, который содержит файлы с расширением *.x3d, преобразованные в строки.
  • Логическую переменную file_created - переменная, являющаяся флагом для загрузки результирующего файла. Ее исходное значение ровно false.
  • Массивы arr_obj_x - массив данных, содержащий координату по x создаваемого объекта
  • Массивы arr_obj_y - массив данных, содержащий координату по y создаваемого объекта
  • Массивы arr_rotation - массив данных, содержащий величину угла поворота создаваемого объекта
  • Переменная obj_string - строковая переменная, в которой будет создаваться содержимое результирующего файла.
  • Для того чтобы создать данный файл необходимо добавить к каждому элементу массива arr_obj_string соответствующие элементы массивов arr_obj_x, arr_obj_y и arr_rotation.
  • Трансформация объекта в языке X3D осуществляется путем заключения кода, описывающего объект, в парные теги <Transform></Transform>. Для перемещения объекта относительно центра сцены используется атрибут translation, а для поворота объекта вокруг его центра используется атрибут rotation. Оба этих атрибута помещаются в тело открывающего тега <Transform>.
  • Для реализации добавления параметров к каждому элементу к переменной obj_string необходимо добавить строку, которая содержит открывающие теги сцены, формата X3D, группы и координаты положения камеры (<X3D><Scane><Group><Viewpoint centerOfRotation = “0 0 0”/>). На следующем шаге создается цикл for.… Создается временная переменная n_i, которая является индикатором цикла. Осуществляется проход по отрезку от 1 до значения переменной obj_on_pole. При каждом проходе к строковой переменной obj_string прибавляется открывающий тег трансформации, атрибуты перемещения, поворота, а так же соответственно значения элементов массива arr_obj_x, arr_obj_y, arr_rotation, номера которых ровны n_i (“<Transform translation" + chr(61) + chr(34) + int((arr_obj_x[n_i])*10)/10 + " " + int((arr_obj_y[n_i])*10)/10 + " " + "0" + chr(34) + " " + "rotation" + chr(61) + chr(34) + "0 0 " + int((arr_rotation[n_i])*100)/100 + " " + "1" + chr(34) + "> ). Далее к переменной obj_string прибавляется значение элемента массива arr_obj_string с номером n_i, а также, при условии, что элемент в цикле не последний, к переменной obj_string прибавляется закрывающий тег трансформации, закрывающий тег группы и открывающий тек группы (</Transform></Group><Group>).
  • По окончанию цикла к переменной obj_string прибавляется закрывающий тег трансформации, закрывающий тег группы, закрывающий тег сцены и закрывающий тек формата X3D (</Transform></Group></Scane></X3D>).
  • Вышеописанными преобразованиями в строковой переменной было сформировано содержание результирующего файла. Но пока файл еще не записан и остается пустым.
  • Так как язык Action Script не имеет средств для создания файлов, то данная задача может быть решена с помощью использования серверных языков. Для решения данной задачи используется язык программирования PHP.
  • Для передачи переменных из языка ActionScript во внешние сценарии используется функция loadVariables(). Существует два метода реализации передачи переменных:
  • Метод GET. При использовании этого метода существуют ограничения на длину передаваемой информации. К тому же, информация передается открыто.
  • Метод POST. Используется при передаче больших объемов информации.
  • На данном этапе используется метод POST, что позволяет не вводить ограничений на передаваемую информацию.
  • 2.5.4 Запись в файл *.x3d
  • <?php
  • global $HTTP_POST_VARS;
  • $var1 = $_POST["obj_string"];
  • $f_name = realpath("rdyroom.x3d");
  • $file=fopen($f_name,"w");
  • fputs($file, $var1);
  • fclose($file);
  • echo " - ".$var1;
  • echo $f_name;
  • ?>
  • Для записи в файл используется серверный язык программирования PHP.
  • Первым шагом для записи в файл становиться получение значения переменной obj_string, в которой храниться содержание будущего файла. Так как передача переменных осуществлялась методом POST, то и получение должно осуществляться при помощи оператора $_POST[].
  • Далее, в переменную $f_name записывается абсолютный путь к файлу rdyroom.x3d, в который и будет производиться запись. Абсолютный путь вычисляется при использовании функции realpath(). Следующим шагом, является открытие файла для записи. Для этого применяется функция fopen(). Запись в файл производиться с помощью функции fputs(). Для окончания записи необходимо закрыть файл использовав функцию fclose().
  • После выполнения данного сценария содержимое переменной obj_string записывается в файл rdyroom.x3d.
  • После окончания записи в файл логическая переменная file_created получает значение true.
  • 2.6 Алгоритм работы с базами данных
  • Существуют различные виды баз данных. Среди них по модели представления данных различают:
  • Картотеки
  • Иерархические
  • Сетевые
  • Реляционные
  • Многомерные
  • Объектно-ориентированные
  • XML - это текстовый формат, предназначенный для хранения структурированных данных. Данный формат очень удобно использовать для обмена информацией между программами, а также просто для хранения информации с определенной структурой, которую программист может задавать сам, используя простой и понятный синтаксис. Формат XML строится на системе тегов (тэги обязаны быть парными, то есть открывающий и закрывающий).
  • Формат XML имеет иерархическую структуру, что подходит для описания практически любых документов.
  • Одним из достоинств данного формата является то, что он основан на международных стандартах, и для него имеются парсеры (синтаксические анализаторы) для большинства языков программирования, в том числе и для языка ActionScript.
  • 2.6.1 Классы разбора таблицы XML по элементам и атрибутам
  • import mx.utils.Delegate; // подключаем Delegate class
  • class atherXml {
  • var file:String; // адрес xml-файла
  • private var _xml:XML = null; // загруженный объект xml
  • public var _data:Object = null; // результирующий объект с данными
  • public var lenght:Number = 0;
  • public var succ:Boolean = false;
  • public var end_parse:Boolean = false;
  • // Конструктор класса
  • public function atherXml(f:String) {
  • this.file = f;
  • this._xml = new XML(); // создаем объект xml
  • // игнорировать текстовые узлы состоящие из пробелов
  • this._xml.ignoreWhite = true;
  • // указываем облость действия обработчику
  • this._xml.onLoad = Delegate.create(this, xmlParser);
  • this._xml.load(this.file); // начинаем загрузку xml-документа
  • }
  • private function xmlParser(success):Void {
  • // метод Лоад возвращает успешность загрузки, флаг
  • if (success) {
  • this._data = new Object(); // инициализация объекта с данными
  • var group = this._xml.firstChild.firstChild; // указатель на первый элемент
  • while (group) {
  • // в цикле проходим по всем элементам
  • var elem_num = group.attributes.elem_num;
  • this._data[elem_num] = new Object();
  • this._data[elem_num]['gr_name'] = group.attributes.gr_name;
  • this._data[elem_num]['items'] = new Object;
  • var item = group.firstChild; // первый ребенок группы
  • while(item) {
  • // цикл по детям
  • var prop_num = item.attributes.prop_num;
  • this._data[elem_num]['items'][prop_num] = new Object();
  • this._data[elem_num]['items'][prop_num]['name'] = item.attributes.name;
  • this._data[elem_num]['items'][prop_num]['description'] = item.firstChild.nodeValue;
  • item = item.nextSibling;
  • }
  • group = group.nextSibling;
  • lenght = lenght + 1;
  • }
  • }
  • // функция для использования полученных данных
  • _root.parseather(success);
  • end_parse = true;
  • }
  • }
  • Загрузка и синтаксический анализ файла *.xml может потребовать большое количество времени и памяти. Поэтому для облегчения более быстрой загрузки и разбора данных созданы несколько идентичных классов, которые позволяют осуществлять параллельную загрузку элементов для каждого раздела.
  • Все эти классы используют идентичный алгоритм, поэтому достаточно описать только один из них, чтобы понимать, как работают остальные. Каждый из этих классов является синтаксическим анализатором (парсером), который нацелен на то, чтобы разбивать файл формата XML, который имеет определенную структуру, на элементы и атрибуты.
  • Исходными данными для данного алгоритма является только имя файла *.xml, которое храниться в переменной f. Класс делиться на несколько разделов. Первый из них, это раздел объявления переменных. Второй раздел - это конструктор класса. В этом разделе переменной file мы присваиваем значение переменной f. (переменная f является временной переменной). Далее создается новый объект типа XML под именем _xml. Объекты типа XML имеют метод ignoreWhite (данный метод позволяет пропускать поля, содержащие только пробелы, если значение установлено как true). После установки метода ignoreWhite для элемента _xml в значение true начинается загрузка файла.
  • Запускается подпрограмма класса xmlParser(). Входными данными для нее является логическая переменная success.
  • Если ее значение ровно true, то создается новый объект _data типа Object. Далее создается временная переменная group, которая служит указателем на первый элемент.
  • В цикле while… проходим по всем элементам. Создается временная переменная elem_num, которая является указателем на атрибут элемента (содержит номер группы). Переменная _data[elem_num] объявляется как объект. Объекту _data[elem_num][`gr_name'] присваивается значение имя группы элемента. Переменная _data[elem_num][`items'] объявляется как объект. Далее осуществляется проход по детям объекта _data[elem_num][`items'].
  • По окончанию прохода запускается внешняя функция, которая записывает все элементы в массивы, в зависимости от имени группы.
  • 2.6.2 Универсальная подпрограмма по записи элементов и атрибутов из таблицы XML в различные массивы, в зависимости от раздела
  • function unisersalPars(in_xml:menuXml, in_k:Number, num_in:String, type_in:Array, url_in:Array, x_in:Array, y_in:Array, obj_in:Array, obj_flag:Array, w_in:Array, h_in:Array) {
  • for (var prop_num in in_xml._data[num_in]['items']) {
  • //Если имя параметра URL, то оно записывается в массив URL
  • if (in_xml._data[num_in]['items'][prop_num]['name'] == "url") {
  • url_in[num] = in_xml._data[num_in]['items'][prop_num]['description'];
  • flag_url = true;
  • }
  • //Если имя параметра X, то оно записывается в массив X
  • if (in_xml._data[num_in]['items'][prop_num]['name'] == "x") {
  • x_in[num] = in_xml._data[num_in]['items'][prop_num]['description'];
  • flag_x = true;
  • }
  • //Если имя параметра Y, то оно записывается в массив Y
  • if (in_xml._data[num_in]['items'][prop_num]['name'] == "y") {
  • y_in[num] = in_xml._data[num_in]['items'][prop_num]['description'];
  • flag_y = true;
  • }
  • //Если имя параметра W, то оно записывается в массив W
  • if (in_xml._data[num_in]['items'][prop_num]['name'] == "w") {
  • w_in[num] = in_xml._data[num_in]['items'][prop_num]['description'];
  • flag_w = true;
  • }
  • //Если имя параметра H, то оно записывается в массив H
  • if (in_xml._data[num_in]['items'][prop_num]['name'] == "h") {
  • h_in[num] = in_xml._data[num_in]['items'][prop_num]['description'];
  • flag_h = true;
  • }
  • if ((flag_url) && (flag_x) && (flag_y)) {
  • partview(x_in, y_in, url_in, obj_in, obj_flag, in_k);
  • };
  • };
  • };
  • Исходными данными для данной подпрограммы являются:
  • Переменная in_xml - переменная, содержащая разобранный на элементы и атрибуты файл *.xml
  • Переменная i_in - переменная, которая содержит величину смещения глубины.
  • Переменная num_in - переменная, которая содержит строковое значение количества элементов для данного раздела
  • Массив type_in - массив переменных, который содержит имя группы для каждого элемента
  • Массив url_in - массив переменных, который содержит имя файла картинки для каждого элемента.
  • Массив x_in - массив переменных, который содержит координату по оси x, в которую будет установлен элемент на рабочем поле.
  • Массив y_in - массив переменных, который содержит координату по оси y, в которую будет установлен элемент на рабочем поле.
  • Массив obj_in - массив переменных типа MovieClip, в котором содержаться объекты.
  • Массив obj_flag - массив логических переменных.
  • Массив h_in - массив переменных, который содержит значение ширины каждого элемента.
  • Массив w_in - массив переменных, который содержит значение длины каждого элемента.
  • Данный алгоритм основан на переборе элементов. В цикле for..., который проходит по всем элементам объекта in_xml. Далее начинается заполнение исходных массивов. Если выполняется равенство для элемента in_xml._data[num_in] ['items'][prop_num]['name'], то элементу соответствующего массива присваивается значение элемента in_xml._data[num_in]['items'][prop_num]['description'].
  • Например:
  • //Сравнение имени элемента
  • if (in_xml._data[num_in]['items'][prop_num]['name'] == "url") {//Присвоение элементу массива url_in[num] значения поля элемента.
  • url_in[num] = in_xml._data[num_in]['items'][prop_num]['description'];flag_url = true;
  • }
  • После окончания работы подпрограммы получаем сформированные массивы данных для определенного раздела.
  • 2.6.3 Подпрограммы частичного вывода элементов из таблицы XML на экран в зависимости от раздела
  • function partview(x_in_i:Array, y_in_i:Array, url_in_i:Array, obj_in_i:Array, obj_flag_i:Array, in_k_i:Number, w_in_i:Array, h_in_i:Array) : Void {
  • if (type_of_obj == "bed") {
  • if ((menu_obj_flag[8])&&(!bed_menu_open)) {
  • last_num = 0;
  • for (var n_i = 1; n_i <=5; n_i++) {
  • name = type_of_obj + n_i;
  • obj_in_i[n_i] = _root.createEmptyMovieClip(name, n_i+in_k_i);
  • loadMovie(url_in_i[n_beds - n_i + 1], obj_in_i[n_i]);
  • arr_visible_i[n_i] = n_beds - n_i + 1;
  • arr_visible_w[n_i] = w_in_i[n_beds - n_i + 1];
  • arr_visible_h[n_i] = h_in_i[n_beds - n_i + 1];
  • if (last_num == 0) {
  • obj_in_i[n_i]._y = menu_obj[8]._y + 10 + last_num*40 + 30;
  • obj_in_i[n_i]._x = parseFloat(x_in_i[n_beds - n_i + 1]);
  • } else {
  • obj_in_i[n_i]._y = menu_obj[8]._y + 10 + last_num*40 + 30 + last_num*10;
  • obj_in_i[n_i]._x = parseFloat(x_in_i[n_beds - n_i + 1]);
  • };
  • if ((x_in_i[n_beds - n_i] != 0)&&(last_num <n_beds - 5)) {
  • last_num += 1;
  • };
  • obj_flag_i[n_i] = false;
  • obj_in_i[n_i]._alpha = 100;
  • obj_in_i[n_i].enabled = true;
  • };
  • };
  • if ((menu_obj_flag[6])&&(bed_menu_open)&&(last_num < n_beds)) {
  • var buf_last = last_num;
  • for (var n_i = 1; n_i <=5; n_i++) {
  • if (url_in_i[n_beds - n_i + 1] != undefined) {
  • loadMovie(url_in_i[n_beds - (n_i + buf_last) + 1], obj_in_i[n_i]);
  • arr_visible_i[n_i] = n_beds - (n_i + buf_last) + 1;
  • arr_visible_w[n_i] = w_in_i[n_beds - (n_i + buf_last) + 1];
  • arr_visible_h[n_i] = h_in_i[n_beds - (n_i + buf_last) + 1];
  • }
  • if ((x_in_i[n_beds - (n_i + buf_last) + 1] != 0)&&(last_num <n_beds)) {
  • last_num += 1;
  • };
  • obj_flag_i[n_i] = false;
  • };
  • };
  • if ((menu_obj_flag[7])&&(bed_menu_open)&&(last_num > 1)) {
  • var buf_last = last_num;
  • for (var n_i = 1; n_i <=5; n_i++) {
  • if (url_in_i[n_beds - n_i + 1] != undefined) {
  • loadMovie(url_in_i[n_beds - (buf_last - n_i)], obj_in_i[Math.abs(n_i-6)]);
  • arr_visible_i[Math.abs(n_i-6)] = n_beds - (buf_last - n_i);
  • arr_visible_w[Math.abs(n_i-6)] = w_in_i[n_beds - (buf_last - n_i)];
  • arr_visible_h[Math.abs(n_i-6)] = h_in_i[n_beds - (buf_last - n_i)];
  • }
  • if ((x_in_i[n_tables - (buf_last - n_i)] != 0)&&(last_num <= n_beds)) {
  • last_num -= 1;
  • };
  • obj_flag_i[n_i] = false;
  • };
  • };
  • flag_url = false;
  • flag_x = false;
  • flag_y = false;
  • };
  • };
  • Исходными данными для данного алгоритма являются:
  • Переменная i_in_i - переменная, которая содержит величину смещения глубины.
  • Переменная type_of_obj - переменная, которая содержит имя раздела.
  • Массив url_in_i - массив переменных, который содержит имя файла картинки для каждого элемента.
  • Массив x_in_i - массив переменных, который содержит координату по оси x, в которую будет установлен элемент на рабочем поле.
  • Массив y_in_i - массив переменных, который содержит координату по оси y, в которую будет установлен элемент на рабочем поле.
  • Массив obj_in_i - массив переменных типа MovieClip, в котором содержаться объекты.
  • Массив obj_flag_i - массив логических переменных.
  • Массив h_in_i - массив переменных, который содержит значение ширины каждого элемента.
  • Массив w_in_i - массив переменных, который содержит значение длины каждого элемента.
  • Данный алгоритм начинает свою работу с условного оператора. Необходимо установить, к какому разделу относится тот или иной объект. Если переменная type_of_obj удовлетворяет условию, то начинает непосредственный вывод элементов на экран. При начале вывода необходимо проверить несколько условий:
  • Какая кнопка была нажата пользователем
  • Открыт ли раздел
  • Если в первый раз нажата кнопка раздела, то раздел открывается. Это происходит по следующему алгоритму:
  • Переменная last_num содержит в себе номер последнего выведенного на экран элемента. Эта переменная обнуляется, так как открытие раздела производится впервые.
  • Запускается цикл for… проходящий от 1 до 5 (переменная n_i является счетчиком цикла).
  • Переменная name содержит в себе имя будущего MovieClip'а.
  • В элемент массива obj_in_i с номером n_i создается пустой MovieClip.
  • В этот MovieClip помещается картинка, имя которой содержится в массиве url_in_i.
  • Элементам массивов arr_visible_i, arr_visible_h, arr_visible,w присваиваются номер, ширина и длинна элемента соответственно.
  • Значение переменной last_num увеличивается на 1.
  • Счетчик цикла увеличивается на 1.
  • Если раздел открыт, и нажата кнопка перелистывания элементов, то алгоритм работы следующий:
  • Создается временная переменная buf_last. Ей присваивается значение переменной last_name.
  • Запускается цикл for… проходящий от 1 до 5 (переменная n_i является счетчиком цикла )
  • В элемент массива obj_in_i с номером n_i помещается картинка, имя которой содержится в массиве url_in_i.
  • Элементам массивов arr_visible_i, arr_visible_h, arr_visible,w присваиваются номер, ширина и длинна элемента соответственно.
  • Значение переменной last_num увеличивается на 1.
  • Счетчик цикла увеличивается на 1
  • Данный алгоритм универсален для любого раздела.
  • 2.7 Алгоритмы работы с двухмерными объектами
  • 2.7.1 Алгоритм по созданию точки в рабочей области
  • if ((x + (w_p/2) > wmax) or (y + (h_p/2) > hmax) or (drawing_end) or (x - (w_p/2) < wmin) or (y - (h_p/2) < hmin)) {
  • flag1 = false;
  • };
  • //Если происходит попытка поставить точку в зоне рисования,

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

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

    лабораторная работа [678,8 K], добавлен 22.12.2011

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

    реферат [6,6 K], добавлен 17.11.2002

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

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

  • Широкое использование компьютерных и информационных технологий. Концепции типов данных. Алгоритмы сортировки одномерных массивов. Описание двумерного массива Паскаля. Методы доступа к элементам массивов. Индексные, динамические и гетерогенные массивы.

    курсовая работа [66,3 K], добавлен 07.12.2010

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

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

  • Анализ предметной области. Сравнительный анализ систем визуализации трёхмерных объектов. Обоснование выбора среды программирования. Разработка базы данных. Архитектура программного продукта. Алгоритм шифрования Blowfish с обратной связью по шифр-тексту.

    дипломная работа [5,3 M], добавлен 22.11.2015

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

    курсовая работа [658,1 K], добавлен 03.06.2015

  • Создание реляционной базы данных, запросов, форм и отчетов по БД "Компьютеры", "Таблицы". Создание базы данных, объектов, заполнение таблиц данными, выполнение схемы. Справочно-правовая система "Консультант Плюс". Информационные массивы, разделы и банки.

    контрольная работа [4,3 M], добавлен 21.10.2009

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

    курсовая работа [624,5 K], добавлен 30.05.2019

  • Программа перенесения данных из таблицы Word в таблицу базы данных. Алгоритм решения задачи в виде текстового описания. Описание базы данных (структура таблиц, схема). Копии с экрана форм для работы с базой данных при разработке их в конструкторе.

    контрольная работа [914,3 K], добавлен 26.03.2011

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