воскресенье, 19 декабря 2010 г.

Олимпийские будни

Как я уже упоминал на страницах блога есть несколько ВУЗов, чьи успехи по внедрению САПР в учебный процесс вызывают в моей душе если не восхищение, то уважение. Одним из этих ВУЗов является БГТУ им. Шухова. О нем я писал совсем недавно по этому и упоминаю первым в списке. Вторым назову “Хмельницкий Национальный Университет”. Вторым он идет потому как дальнейшая информация связана с ним.

image

Из года в год, на протяжении вот уже тринадцати лет данный ВУЗ проводит олимпиаду под названием: “САПР и компьютерное моделирование в машиностроении”. Причем олимпиаду проводит в двух вариантах – очная, которая проходит в середине апреля в г. Хмельницке, и заочная – в начале декабря. Задания данных олипиад проще всего охарактеризовать как “разработка систем автоматизации проектирования”. Что под этим понимается? А понимается целый класс задач – распознавание, CAD дополнения автоматизирующие те или иные задачи проектирования,  векторизация и много чего другого. Обычно на очной олимпиаде дается 4-6 заданий разной направленности и сложности и дается на выполнение около четырех часов. На следующей за очным весенним туром зимней заочной олимпиадой, даются +/- те же задания, по крайней мере наиболее популярные в очном туре там встречаются, ну и иногда проскакивает нечто новое. На выполнение заочного задания отводится аж неделя. При этом следует отметить, что студентам участвующим в олимпиаде никто не отменяет основные занятия, итого времени остается не многим больше.

Естественно заочность олимпиады создает ряд проблем, но все они ложатся на совесть участников. Мы не первый год участвуем в обоих олимпиадах, но обычно особо похвастаться нечем. Заочный тур чаще всего проваливается по разным причинам. То народ заболеет, то интернет отключится в неподходящий момент… в общем отмазки получаются разные абы не позориться ;)

В очном туре от нас (от политеха) обычно участвуют два “заклятых” друга – кафедра ДПМ и моя родная кафедра. Заклятость проявляется в том, что мы давно друг друга знаем и во многом сотрудничаем, но во многом и соперничаем к всеобщему удовольствию. Есть вещи в которых мы сильнее, есть вещи до которых нам далеко. Одним из таких моментов, в котором ДПМ традиционно сильнее и является данная олимпиада, вернее круг задач близкий к ней. Мы то пытаемся подтянуться, но пока успехи маловаты :(. А уж за лидером – Хмельницким угнаться вообще не легко.

Так вот за 12 лет организаторы выдали на гора уже около 50 различных задач. В связи с тем, что даже очень богатое воображение тоже может выдохнуться, организаторы постоянно просят другие ВУЗы помочь с созданием задач. Обычно все обещают, но редко кто присылает. В прошлый мой приезд, я пообещал с этим делом немного помочь, и в результате обсуждения многие задачи были отбракованы, но родились две, которые я и хотел бы предъявить на суд общественности. В связи с тем, что обе задачи уже участвовали и в очном и в заочном туре, думаю проблем с публикацией быть не должно. Итак задача №1.

Задача: “Shape from Shading” получить геометрию объекта из «закраски». Он же «генератор ландшафта»

В качестве исходных данных для программы выступает следующая информация:

  1. графический файл произвольного разрешения в градациях серого
  2. длина искомого трехмерного объекта (масштаб по Х)
  3. ширина искомого трехмерного объекта (масштаб по Y)
  4. разница высот между самой нижней и самой верхней точками искомого объекта
  5. положение  центра координат
  6. метод воостановления геометрии:

·         - равномерный шаг по длине и ширине (количество линий уровня)

·         - определение густоты сетки из разницы градиента цвета

 

По умолчанию считается что:

  1. координаты  Х, Y, Z искомого объекта меняются в пределах 0 - 1
  2. центр координат лежит в нижнем левом углу графического файла
  3. количество линий уровня = 10

clip_image002[4]

clip_image002[4]

Рис.1

Рис.2

 

 

Построенную геометрию необходимо:

  1. визуализировать внутри собственной программы

       в изометрическом виде

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

  1. передать/построить в произвольную CAD систему  (на выбор разработчика)

       в сеточном формате

       в формате аналитически заданной поверхности (NURBS, B-Spline и пр.)

 

Дополнительно поощряются следующие возможности разрабатываемого программного продукта:

1.      Обработка исходного изображения:

1.      изменение цветности изображения

2.      поворот, зеркалирование изображения

3.      обрезка изображения

4.      сглаживание/резкость, контраст/яркость

5.      попиксельное редактирование: «резинка», «карандаш», «кисти» с различными эффектами (к примеру сглаживание), заливка области и пр..

2.      Обработка полученной геометрии:

1.      поворот полученной геометрии в трехмерном пространстве

2.      «обрезка» полученной геометрии до нужной формы границы

3.      «склейка» нескольких трехмерных кусков

4.      алгебраические операции (сложение, вычитание, усреднение) нескольких трехмерных кусков в единое целое

5.      наложение текстуры

6.      анализ полученной геометрии (возможностями собственной программы):

1.      кривзна/радиус

2.      «зебра»

3.      линии равного уровня (по всем координатам)

4.      прочее

2.      Экспорт :

       сеточной геометрии в STL формат

        поверхности в IGES/STEP

       кривых уровня в IGES/STEP/DXF

 

 


Приложение1. Структура файла в формате STL

solid Object01

  facet normal 7.160495e-002 -2.368895e-001 9.688942e-001

    outer loop

      vertex 8.335612e+000 -1.087681e+002 2.561384e+001

      vertex 1.934397e+001 -1.055182e+002 2.559488e+001

      vertex 1.927599e+001 -9.714783e+001 2.764641e+001

    endloop

  endfacet

  facet normal 8.911768e-002 -2.524342e-001 9.635015e-001

    outer loop

      vertex 1.927599e+001 -9.714783e+001 2.764641e+001

      vertex 7.897567e+000 -1.003823e+002 2.785143e+001

      vertex 8.335612e+000 -1.087681e+002 2.561384e+001

    endloop

  endfacet

endsolid Object01

solid Object02

endsolid Object02

 

 

solid – начало тела, поверхности, объекта

endsolidконец информации по телу/поверхности

В цикле solid - endsolidсодержится информация о всех полигонах описывающих геометрию объекта

Object01, Object02 – название тел, поверхностей, объектов

 

facet normal – начало данных по полигону.

endfacetконец данных по полигону

В цикле facet normal - endfacetсодержится следующая информация: нормаль к полигону и список вершин.

 

outer loop, end loop – обозначение начала и конца списка вершин полигона соответственно

vertexкоординаты вершин треугольника

 

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

Для уменьшения количества ошибок чтения *.stl файлов, не следует делать:

  • пустых строк,
  • полигонов содержащих количество вершин отличное от трех;

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


Приложение2. Методы оценки

 

Основная таблица оценки

 

Вес (%)

Макс.баллы

Итог

1. Вычитка данных

10

10

1

2. Получение координат точек результирующей поверхности

30*

 

 

2.1. Равномерная сетка

10

10

1

2.2. Сетка от градиента

20

10

2

3.визуализировать внутри собственной программы

30*

 

 

3.1. в изометрическом виде

15

10

1,5

3.2. в трехмерном виде

15

10

1,5

4. Экспорт в CAD

30*

 

 

4.1. сеточный формат (открытие/создание)**

2/3

10/10

0,2/0,3

4.2. аналитический вид (открытие, создание)**

15/10

10/10

1,5/1

итого

100%

10

10

 

Таблица оценки дополнительных возможностей***

 

 

Вес (%)

Макс.баллы

итог

1.      Обработка исходного изображения:

100****

0,5

0,5

1.1.   цветность

40*

 

 

1.1.1.      градации серого

10

10

1

1.1.2.      цветная палитра

30

10

3

1.2.   поворот, зеркалирование

5

10

0,5

1.3.   обрезка

5

10

0,5

1.4.   сглаживание, контраст

5

10

0,5

1.5.   попиксельное редактирование:

10

10

1

2.      Обработка полученной геометрии:

100****

0,5

0,5

2.1.   поворот

10

10

1

2.2.   «обрезка»

10

10

1

2.3.   «алгебра»

30

10

3

2.4.   текстуры

10

10

1

2.5.   анализ:

100****

0,5

0,5

1.5.1.            кривизна/радиус

20

10

2

1.5.2.            «зебра»

30

10

3

1.5.3.            линии равного уровня

10

10

1

1.5.4.            прочее (за каждую доп. возможность)

10

10

1

 

* Общий вес пункта оценки. Оценка по данному пункту состоит исключительно из суммы оценок подпунктов

** Открытие – открытие стандартной CAD уже готового файла в нейтральном формате. Создание – создание геометрии определенного типа внутри CAD системы.

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

**** За наличие любой из возможностей пункта участник получает 0,5б + количество балов заработанных на подпунктах.

 

скачать вариант задания оформленный под распечатку можно тут:

Terrain Generator 2

Ну а вторая задача будет чуть позжее.

Комментарии. и дополнения.
Тестовые задачи:

imageimage

С подобной задачей справляется большое количество программ ориентированных на игры и создание ландшафта. Из САПР с этой задачей справляются Rhinoceros, ArtCAM, MasterCAM и ряд других ****CAM систем. С точки зрения программирования задача тоже не сильно сложная, хотя есть и проблемные места. Например если шаг по картинке будет отличным от количества пикселов, то возникает вопрос, как интерпретировать данные внутри квадрата – то ли по минимуму, то ли по максимуму, то ли по среднему. Также очень проблемным получается резкий переход, такой как на второй картинке. Проблемным он получается, так как тоже нет однозначности в его интерпретации – то ли его сделать вертикальным, то ли его сделать с уклоном на величину шага между пикселями. Но это логические вещи, которые нужно решить для себя на начальном этапе. Остальное же – простейший код, который можно сделать за час – два из четырех (если не спешить), а остальное потратить на красивое оформление или ловлю блох.

Если считаете себя неплохим спецом в решении подобных вопросов, попробуйте создать программу в отведенные сроки и сравнить себя со студентами олимпийцами. ;) Успехов, всем кто будет пробовать.

Комментариев нет:

Отправка комментария

Related Posts Plugin for WordPress, Blogger...
Rambler's Top100