Раньше это можно было зделать просто нажав на тест и посмотреть результаты а сейчас никак |
Основы "живого" моделирования
Однако изменение адреса пересылки клеток по разным координатам различно, что определяется положением мышцы в пространстве. Для пояснения этого положения и для формирования алгоритма сжатия мышцы рассмотрим пример.
Пусть 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 (в десятичной системе счисления).
Адресное расстояние между точками А
и М составляет ,
,
. Максимальное адресное расстояние
по всем координатам
.
Тогда очевидно, что если по y, определяя точку переноса, следует шагать с переадресацией, определяемой коэффициентом сжатия, то при том же числе переносов по x следует производить переадресацию в два раза реже, а по z — в четыре раза. Тогда по некоторым координатным адресам переноса возможна неоднократная запись. Однако, поскольку происходит сокращение и диапазона изменения координаты у, по некоторым адресам переноса возможна неоднократная запись. Здесь и приходит на помощь стек, позволяющий сохранить информацию для последующего восстановления (расслабления) мышцы.
Пусть i — параметр цикла переноса
точек отрезка АМ для его преобразования
в отрезок А*М, i = 1, ..., 11. Здесь
граничное значение цикла определяется максимальным значением
точек переноса по всем координатам, равным .
Программно перенос производится с конца отрезка к его началу — чтобы не
уничтожать еще не перенесенную информацию. Тогда адреса переноса отдельно
по координатам находятся как
![]() |
( 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
Найдены адреса, по которым необходимо осуществить пересылку при сокращении левой части мышцы.
Аналогично, для правой части мышцы,
для отрезка МВ, найдем адресные расстояния ,
,
,
. По (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
Таким образом, найдены адреса ячеек памяти, куда следует пересылать информацию при сокращении мышцы. Необходимо выяснить, какие точки отрезка, отображающего мышцу, необходимо пересылать по найденным адресам.
Свяжем перебор искомых точек с тем же параметром цикла организации пересылки
![]() |
( 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 видно формирование стеков при неоднократной записи в одну клетку.
Однако вся проделанная выше работа по сжатию мышцы в действительности касается только клеток со значащим содержимым. Это означает, что если объект задан своей оболочкой, то переносу подвергаются только клетки оболочки. Мышца чаще всего является "пустым" объектом, и смещаются только точки А и В. Переносить ее клетки следует в таком случае лишь тогда, когда она принадлежит оболочке или пересекается с ней.
Сокращение мышцы можно использовать для деформации объекта на стадии его создания. После этого мышца может быть исключена из списка объекта или переопределена вновь в измененных границах.
Таким образом, каждый перенос клетки мышцы или объекта в целом сопровождается анализом на значимость этой клетки.