Опубликован: 01.06.2007 | Уровень: специалист | Доступ: платный | ВУЗ: Московский государственный университет путей сообщения
Лекция 15:

Основы "живого" моделирования

Алгоритм

  1. Производится начальная загрузка в буфер показа БП "нулевого" кадра, т.е. фонового, нейтрального выражения объекта в состоянии ожидания.
  2. Реализуется временной режим работы модели, поддерживающий показ кадров — ключевых или промежуточных — с частотой 20 Гц. Он вхолостую вырабатывает остаток времени, оставшийся от работы программ, до ближайшего значения, кратного 50 мс.
  3. Демонстрируется очередной кадр из БП и производится обращение к Программе обработки ситуации, рассмотренной ранее.
  4. Выполняется после возврата из Программы обработки ситуации. Анализируется: был ли показанный кадр ключевым или промежуточным? Если показанный кадр был промежуточным, выполняется 7.
  5. Если показанный кадр был ключевым, анализируется: иссяк ли сюжетный ряд, т.е. выработала ли Программа оценки ситуации продолжение сюжетного ряда, как реакцию на внешние факторы (рисунок)? Если сюжетный ряд иссяк, управление передается 1 для загрузки "нулевого" кадра, который будет показываться, пока не выработается новый сюжетный ряд. Если сюжетный ряд не иссяк, выполняется 6.
  6. Производится подготовка формирования промежуточных кадров между только что показанным К и следующим L. Взводится счетчик показа промежуточных кадров СПК. Для упрощения демонстрационной модели считаем, что между любыми двумя смежными ключевыми кадрами следует показать 19 промежуточных. То есть выполняется операция СПК := 20.
  7. СПК уменьшается на единицу для показа очередного промежуточного кадра.
  8. Если в результате 7 СПК достиг нуля, показ промежуточных кадров считается законченным, следующим показываемым кадром должен быть кадр L. Выполняется 9. Если СПК не равно нулю, выполняется 10.
  9. Кадр L загружается в БП, далее выполняется 2.
  10. Если СПК не равно нулю, организуется цикл по j (шаги 11-16) перебора контрольных точек объекта. По окончании цикла организуется переход к 20.
  11. Для контрольной точки Kj (xKj, yKj) отыскивается соответствующая ей точка Lj (xLj, yLj) из СКТ кадра L. Отыскивается область \Delta _{j} радиуса Rj с центром в точке Kj , включающая точку Lj (ее проекцию на кадр К ). Радиус Rj вычисляется из соотношения

    2Rj = r(Kj, Lj) + l,

    где r — расстояние, l — поправка, подбираемая экспериментально.

  12. Организуется цикл перебора точек P(x, y) из окрестности \Delta _{j} контрольной точки Kj . Этот перебор осуществляется "циклом в цикле":

    \begin{array}{l}
            for\quad x = x_{Kj} - R_{j}\quad to\quad x_{Kj} +
            R_{j} \quaddo\\
            for\quad y = y_{Kj} - \sqrt{R^2_j-(x-x_{Kj})^2} \quad\\
            to\quad y = y_{Kj} +\sqrt{R^2_j-(x-x_{Kj})^2} \quad do
            \dots
            \end{array}

    По окончании перебора выполняется 17.

  13. Проверяется, разделены ли точки P и L разрезами. Данная проверка производится в результате решения следующей задачи.

    Пусть на рис. 15.17 точки P(x, y) и L(xL, yL) (индекс j опустим) находятся по разные стороны отрезка [A, B], где A = (xA, yA) , B = (xB, yB) , так, что отрезки [P, L] и [A, B] пересекаются. (Именно этот случай запрещает перемещение точки Р за разрез — в окрестность точки L.)

    Анализ  разреза

    Рис. 15.17. Анализ разреза

    Рассмотрим параметрическое описание этих отрезков и запишем уравнения для нахождения точки пересечения (\xi , \eta ).

    [P,L]:
            \left \{
            \begin{array}{l}
            \xi = x+k_1(x_L –x) \\
            \eta = y + k_1(y_L-y)
            \end{array}
            \right ,
            0\le k_1 \le 1,
    [A,B]:
            \left \{
            \begin{array}{l}
            \xi = x_A+k_2(x_B –x_A) \\
            \eta = y_A + k_2(y_B-y_A)
            \end{array}
            \right ,
            0\le k_2 \le 1.

    Или:

    \begin{array}{l}
            x + k_{1}(x_{L} - x) = x_{A} + k_{2}(x_{B} - x_{A}),\\
            y + k_{1}(y_{L} - y) = y_{A} + k_{2}(y_{B} - y_{A}).
            \end{array}

    Отсюда

    \begin{array}{l}
            k_1 = \cfrac{(x-x_A) (y_B-y_A) - (y-y_A) (x_B-x_A)}{
            (x_B-x_A) (y_L-y) - (y_B-y_A) (x_L-x)} \\
            k_2 = \cfrac{(x-x_A)}{ (x_B-x_A)}+ k_1\cfrac{(x_L-x)}{(x_B-x_A)}.
            \end{array}

    Если отрезки пересекаются, выполняется условие 0 <= k1 <= 1, 0 <= k2 <= 1. В противном случае отрезки не пересекаются, и перемещение точки Р в направлении к точке Lj допустимо. Если точки P и L разделены разрезом, производится переход к 12. В противном случае выполняется 14.

  14. Рассчитываются координаты переноса точки Р при формировании очередного промежуточного кадра К*:

    \begin{array}{l}
            x_{пер} = x + (x_{Lj}-x_{Kj})\left (1-\cfrac{r(P,K_j)}{R_j}\right)\cfrac{1}{|СПК|},\\
            y_{пер} = y + (y_{Lj}-y_{Kj})\left (1-\cfrac{r(P,K_j)}{R_j}\right)\cfrac{1}{|СПК|}.
            \end{array}

    Здесь учитывается удаление точки Р от центра — от точки Kj . Так, на окружности радиуса Rj перенос затихает вовсе. Текущее значение СПК характеризует оставшуюся часть смещения.

  15. Проверяется, является ли перенесенная точка контрольной или границей разреза. Если не является, выполняется 12.
  16. Если перенесенная точка является контрольной или границей разреза, фиксируются новые значения координат перенесенной точки (ее образом становится точка Kj* , если это была контрольная точка) в СКТ промежуточного кадра K*. Далее выполняется 12.
  17. Выполняется по окончании цикла перебора точек из \Delta _{j} окрестности (шаг 12). Формируется цикл обработки разрезов, оказавшихся в этой окрестности. По окончании цикла выполняется 10. Организуется перебор точек P(x, y) этой окрестности, подобно организованному в блоке 12.
  18. Проверяется, является ли очередная анализируемая точка "пустой" вследствие деформации (растяжения) объекта. При отрицательном результате анализа выполняется 20.
  19. Если точка "пустая", находится ее усредненное значение на основе непустых окружающих ее точек:

    \begin{array}{rl}(P(x, y)) := & \cfrac{1}{S}[(P(x_{n-1},
            y_{m-1})) + (P(x_{n-1}, y_{m})) + \\&(P(x_{n-1}, y_{m+1})) + (P(x_{n},
            y_{m-1})) + \\
            & + (P(x_{n}, y_{m+1})) + (P(x_{n+1}, y_{m-1}))
            + \\&(P(x_{n+1}, y_{m})) + (P(x_{n+1}, y_{m+1}))
            \end{array}

    где P(x, y) отождествляется с точкой P(xn, ym) для отображения окружающих точек, S — число таких "непустых" точек.

  20. Организуется цикл обработки разрезов кадра К*. После обработки всех разрезов выполняется 24.
  21. Для каждого разреза формируется некоторая окрестность, опирающаяся на разрез, и организуется цикл перебора точек P(x, y) , образованного прямоугольника.
  22. Проверяется: точка P(x, y) — "пустая"?
  23. Если да, отыскивается точка Q(x, y) в кадре L (с теми же координатами) и налагается на точку Р: P(x, y) := Q(x, y).

    Далее выполняется 20.

  24. После анализа всех разрезов (шаг 20) считается, что кадр К* полностью сформирован. Производится загрузка сформированного кадра в буфер показа БП и управление передается 2 для продолжения работы модели.
Эльвира Герейханова
Эльвира Герейханова

Раньше это можно было зделать просто нажав на тест и посмотреть результаты а сейчас никак

Елена Лобынцева
Елена Лобынцева
Помогите разобраться как можно подобрать НС для распознавания внутренней области выпуклого многоугольника?
Дмитрий Степанов
Дмитрий Степанов
Россия, Москва, МГТУ им. Баумана, 2006
Дмитрий Степаненко
Дмитрий Степаненко
Россия