Московский государственный университет путей сообщения
Опубликован: 01.06.2007 | Доступ: свободный | Студентов: 1921 / 108 | Оценка: 4.38 / 3.75 | Длительность: 22:59:00
ISBN: 978-5-9556-0094-9
Специальности: Программист
Лекция 15:

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

Однако изменение адреса пересылки клеток по разным координатам различно, что определяется положением мышцы в пространстве. Для пояснения этого положения и для формирования алгоритма сжатия мышцы рассмотрим пример.

Пусть 045 451 714трехмерный адрес точки А в восьмеричной системе счисления. Это означает, что А = (x1, y1, z1) = (045, 451, 714) . Аналогично, пусть В = (x2, y2, z2) = (055, 471, 720) , а неподвижная точка находится в середине отрезка АВ, M = (xM, yM, zM) = (051, 461, 716) . Зададим l = 0,610 (в десятичной системе счисления).

Адресное расстояние между точками А и М составляет \Delta A_{x}        = 4, \Delta A_{y} = 10 = 8_{10}, \Delta A_{z} = 2. Максимальное адресное расстояние по всем координатам \Delta А = 8_{10}.

Тогда очевидно, что если по y, определяя точку переноса, следует шагать с переадресацией, определяемой коэффициентом сжатия, то при том же числе переносов по x следует производить переадресацию в два раза реже, а по z — в четыре раза. Тогда по некоторым координатным адресам переноса возможна неоднократная запись. Однако, поскольку происходит сокращение и диапазона изменения координаты у, по некоторым адресам переноса возможна неоднократная запись. Здесь и приходит на помощь стек, позволяющий сохранить информацию для последующего восстановления (расслабления) мышцы.

Пусть iпараметр цикла переноса точек отрезка АМ для его преобразования в отрезок А*М, i = 1, ..., 11. Здесь граничное значение цикла определяется максимальным значением точек переноса по всем координатам, равным \Delta А + 1. Программно перенос производится с конца отрезка к его началу — чтобы не уничтожать еще не перенесенную информацию. Тогда адреса переноса отдельно по координатам находятся как

\begin{array}{l}
      x_{пер} = x_{M} - il\cfrac {\Delta A_x}{\Delta A}\\
      y_{пер }= y_{M }- il\cfrac {\Delta A_y}{\Delta A}\\
      z_{пер }= z_{M} - il\cfrac {\Delta A_z}{\Delta A}.
      \end{array} ( 15.2)

В указанном порядке рассчитаем адреса переноса отдельно по координате x, не допуская при округлении выхода адресов из адресного пространства мышцы:

051 -  1 x 0,610 x 0,510 = 051
        051 -  2 x 0,610 x 0,510 = 050
        051 -  3 x 0,610 x 0,510 = 050
        051 -  4 x 0,610 x 0,510 = 050
        051 -  5 x 0,610 x 0,510 = 047
        051 -  6 x 0,610 x 0,510 = 047
        051 -  7 x 0,610 x 0,510 = 046
        051 - 10 x 0,610 x 0,510 = 046
        051 - 11 x 0,610 x 0,510 = 046

Рассчитаем координату у:

461 -  1 x 0,610 x 1 = 460
        461 -  2 x 0,610 x 1 = 460
        461 -  3 x 0,610 x 1 = 457
        461 -  4 x 0,610 x 1 = 456
        461 -  5 x 0,610 x 1 = 456
        461 -  6 x 0,610 x 1 = 455
        461 -  7 x 0,610 x 1 = 454
        461 - 10 x 0,610 x 1 = 453
        461 - 11 x 0,610 x 1 = 452

Адреса переноса по координате z:

716 -  1 x 0,610 x 0,2510 = 716
        716 -  2 x 0,610 x 0,2510 = 716
        716 -  3 x 0,610 x 0,2510 = 716
        716 -  4 x 0,610 x 0,2510 = 716
        716 -  5 x 0,610 x 0,2510 = 715
        716 -  6 x 0,610 x 0,2510 = 715
        716 -  7 x 0,610 x 0,2510 = 715
        716 - 10 x 0,610 x 0,2510 = 715
        716 - 11 x 0,610 x 0,2510 = 715

Найдены адреса, по которым необходимо осуществить пересылку при сокращении левой части мышцы.

Аналогично, для правой части мышцы, для отрезка МВ, найдем адресные расстояния \Delta A_{x}        = -4, \Delta A_{y} = -10 = -8_{10}, \Delta A_{z}        = -2, \Delta А = -8_{10}. По (15.2) для адресов переноса по x, y, z находим

051 +  1 x 0,610 x 0,510 = 051      461 +  1 x 0,610 x 1 = 462    716 +  1 x 0,610 x 0,2510 = 716
051 +  2 x 0,610 x 0,510 = 052      461 +  2 x 0,610 x 1 = 463    716 +  2 x 0,610 x 0,2510 = 716
051 +  3 x 0,610 x 0,510 = 052      461 +  3 x 0,610 x 1 = 463    716 +  3 x 0,610 x 0,2510 = 716
051 +  4 x 0,610 x 0,510 = 052      461 +  4 x 0,610 x 1 = 464    716 +  4 x 0,610 x 0,2510 = 716
051 +  5 x 0,610 x 0,510 = 053      461 +  5 x 0,610 x 1 = 464    716 +  5 x 0,610 x 0,2510 = 717
051 +  6 x 0,610 x 0,510 = 053      461 +  6 x 0,610 x 1 = 465    716 +  6 x 0,610 x 0,2510 = 717
051 +  7 x 0,610 x 0,510 = 053      461 +  7 x 0,610 x 1 = 465    716 +  7 x 0,610 x 0,2510 = 717
051 + 10 x 0,610 x 0,510 = 054      461 + 10 x 0,610 x 1 = 466    716 + 10 x 0,610 x 0,2510 = 717
051 + 11 x 0,610 x 0,510 = 054      461 + 11 x 0,610 x 1 = 466    716 + 11 x 0,610 x 0,2510 = 717

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

Свяжем перебор искомых точек с тем же параметром цикла организации пересылки

x = x_{M} - i\cfrac {\Delta A_x}{\Delta A}
      y = y_{M }- i\cfrac {\Delta A_y}{\Delta A}
      z = z_{M} - i\cfrac {\Delta A_z}{\Delta A}. ( 15.3)

Найдем отдельно для x, y, z отрезка АМ адреса пересылаемых точек:

051 -  1 x 0,510 = 050           461 -  1 x 1 = 460           716 -  1 x 0,2510 = 716
051 -  2 x 0,510 = 050           461 -  2 x 1 = 457           716 -  2 x 0,2510 = 715
051 -  3 x 0,510 = 047           461 -  3 x 1 = 456           716 -  3 x 0,2510 = 715
051 -  4 x 0,510 = 047           461 -  4 x 1 = 455           716 -  4 x 0,2510 = 715
051 -  5 x 0,510 = 046           461 -  5 x 1 = 454           716 -  5 x 0,2510 = 715
051 -  6 x 0,510 = 046           461 -  6 x 1 = 453           716 -  6 x 0,2510 = 714
051 -  7 x 0,510 = 045           461 -  7 x 1 = 452           716 -  7 x 0,2510 = 714
051 - 10 x 0,510 = 045           461 - 10 x 1 = 451           716 - 10 x 0,2510 = 714
051 - 11 x 0,510 = 045           461 - 11 x 1 = 450           716 - 11 x 0,2510 = 714

Для отрезка МВ находим

051 +  1 x 0,510 = 052           461 +  1 = 462               716 +  1 x 0,2510 = 716
051 +  2 x 0,510 = 052           461 +  2 = 463               716 +  2 x 0,2510 = 716
051 +  3 x 0,510 = 053           461 +  3 = 464               716 +  3 x 0,2510 = 716
051 +  4 x 0,510 = 053           461 +  4 = 465               716 +  4 x 0,2510 = 716
051 +  5 x 0,510 = 054           461 +  5 = 466               716 +  5 x 0,2510 = 716
051 +  6 x 0,510 = 054           461 +  6 = 467               716 +  6 x 0,2510 = 716
051 +  7 x 0,510 = 055           461 +  7 = 470               716 +  7 x 0,2510 = 716
051 + 10 x 0,510 = 055           461 + 10 = 471               716 + 10 x 0,2510 = 716
051 + 11 x 0,510 = 055           461 + 11 = 471               716 + 11 x 0,2510 = 716

"Склеим" координатные части адресов и обозначим ее окончательно в двух столбцах: в левом — пересылку для левой части мышцы, в правом — для правой.

(050 460 716) => 051 460 716            (052 462 716) => 051 462 716
      (050 457 715) => 050 460 716            (052 463 717) => 052 463 716
      (047 456 715) => 050 457 716            (053 464 717) => 052 463 716
      (047 455 715) => 050 456 716            (053 465 717) => 052 464 716
      (046 454 715) => 047 456 715            (054 466 717) => 053 464 717
      (046 453 714) => 047 455 715            (054 467 720) => 053 465 717
      (045 452 714) => 046 454 715            (055 470 720) => 053 465 717
      (045 451 714) => 046 453 715            (055 471 720) => 054 466 717
      (045 450 714) => 046 452 715            (055 471 720) => 054 466 717

В строках 2 и 3, в 6 и 7, а также в 8 и 9 видно формирование стеков при неоднократной записи в одну клетку.

Однако вся проделанная выше работа по сжатию мышцы в действительности касается только клеток со значащим содержимым. Это означает, что если объект задан своей оболочкой, то переносу подвергаются только клетки оболочки. Мышца чаще всего является "пустым" объектом, и смещаются только точки А и В. Переносить ее клетки следует в таком случае лишь тогда, когда она принадлежит оболочке или пересекается с ней.

Сокращение мышцы можно использовать для деформации объекта на стадии его создания. После этого мышца может быть исключена из списка объекта или переопределена вновь в измененных границах.

Таким образом, каждый перенос клетки мышцы или объекта в целом сопровождается анализом на значимость этой клетки.

Эльвира Герейханова
Эльвира Герейханова

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

Елена Лобынцева
Елена Лобынцева
Помогите разобраться как можно подобрать НС для распознавания внутренней области выпуклого многоугольника?