В споре рождается истина

- А я так не думаю!

Posts Tagged ‘Структурный анализ

Структурный анализ

оставьте комментарий »

Продолжаем конкретизировать задачи, цели и методы их достижения.

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

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

Один из возможных вариантов – делать это с помощью графа.
На самом деле это единственный нормальный вариант, до которого я смог додуматься :) .
Радует то, что в какой-то статье (ссылку дам позже) работники какой-то кафедры СПбГУ ИТМО описывали свою программу, созданную только для структурного анализа, причем тоже использовали графы.

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

Сначала надо указать, что приводит механизм в движение. Выбранные пользователем стартовая КП и стартовое звено образуют группу Ассура первого класса.

Далее начинается собственно анализ.

Пока что будем реализовывать поиск групп Ассура 2-го класса (используемый алгоритм легко модифицировать для более сложных задач, мы оставляем это на будущее). Группа Ассура 2-го класса – это набор из 2 КП и 3 звеньев, которые соединяются этими КП. Искать эти группы надо по правилу: 2 вершины должны быть уже просчитаны на данный момент, тогда мы можем просчитать третью.

Для примера, пусть есть следующий механизм:

Механизм

Качество рисунков в этой статье не ахти, но это потом поправлю.

Этому механизму соответствует следующий граф:

Числа в вершинах графа – это номера соответствующих звеньев механизма. Введена фиктивная вершина “0″, которая обозначает “землю”. Это сделано для упрощения дальнейшего анализа. “Землей” будем называть любую просчитанную вершину. Буквы рядом с ребрами – это имена соответствующих кинематических пар механизма.

“Земляные” вершины будем красить в зеленый темный. Значит, граф превращается в такой:

С учетом того, что пользователь указал 1-ую группу Ассура, имеем следующее:

Звенья 0, 1 и точка O принадлежат теперь 1-ой группе Ассура, 1-го класса.

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

Алгоритм в действии:

  • Вершины 2, 3 и 5 – соседние с темными зелеными. Красим их в светлый зеленый. 
  • Нашли путь 1 A 2 B 3 C 0. Выделяем в отдельную группу Ассура второго класса ребра A, B, C и вершины 2, 3.  
  • Вершины 4 и 7 теперь соседние с темными зелеными. Красим их в светлый зеленый. 
  • Нашли путь 0 D3 5 D2 6 D1 3 (или в другую сторону, не важно). Выделяем  вершины 5, 6 и ребра D1, D2, D3 в отдельную группу Ассура.
  • Вершина 6 теперь стала соседней с темной зеленой. Перекрашиваем ее в светлый зеленый:   
  • И последнее: вершины 6, 7 и ребра E, F1, F2 выделяем в группу Ассура. 

Надо еще раз обратить внимание на то, что ребра графа – это кинематические пары механизма, а вершины графа – это его  ребра.

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

Полученный список позволяет провести кинематический анализ.

Если просчитаны все группы Ассура с 1-й по i-ую в этом списке, то есть все данные для вычисления (i+1)-ой. Таким образом, провести кинематический анализ можно за 1 проход списка.

Написано jtimv

16.01.2010 в 23:10

Опубликовано в Проекты

Отмечено как , ,

Follow

Get every new post delivered to your Inbox.