Тест-тренировка зрительного внимания

    Если я напишу 2, потом 4, потом 6, тогда мы почувствуем себя хорошо, потому что мы знаем, что дальше идет 8. Мы можем это предвидеть, мы не в руках судьбы. Однако, к сожалению, это не имеет ничего общего с истиной...
    х/ф «Оксфордские убийства»


    Задача: обнаружить центральную фигуру среди сереньких фигур вокруг.

    Данный проект — PsyMatchArea — задумывался в качестве альтернативы знаменитым таблицам Шульте. С теми же целями (тренировка зрительного периферического внимания), но с другими, более «отмороженными» исходными предпосылками. Во-первых, нужно было уйти от цифр и букв — символов, знакомых каждому практически с яслей и потому распознаваемых на автомате без активного вовлечения сознания в процесс. Во-вторых, чтобы внимание как можно меньше подменялось памятью (и вообще не расслаблялось), надо было обеспечить соответствующие «помехи» — смена позиций, мерцания, наложения и т.п.

    Режим с несколькими одновременно включёнными помехами


    Самым, наверное, интересным с точки зрения программирования было создать алгоритм, который бы выдавал достаточно разнообразное множество абстрактных символов того или иного типа. Например, символы типа «руна» выращиваются следующим образом: алгоритму на входе предлагается сгенерировать в узловой матрице 3 x 3 пять последовательных соединений с некоторыми топологическими «принуждениями» (ограничение на количество пересечений и повышенная вероятность зацепа всех сторон периметра матрицы). Если в течение определённого количества попыток алгоритм заходит в тупик, он проявляет «толерантность» и пропускает к выходу последний тупиковый вариант (как говорится, что выросло, то выросло).

    Код генератора рун
    void CRunePattern::genSolidLink(int linkCount, int crossesCount)
    {
        if (this->isEmpty())
            return;
        int broadCharge = 5;
        while (broadCharge) {
            m_links.clear();
            QVector <int> dots;
            int currDot = qrand()%(m_cols*m_rows);
            for (int i = 0; i < linkCount; ++i)
            {
                dots.append(currDot);
                int crossCharge = 5;
                while (crossCharge) {
                    int nextDotCharge = 5;
                    int nextDot = qrand()%(m_cols*m_rows);
                    while (nextDotCharge && dots.contains(nextDot)) {
                        nextDot = qrand()%(m_cols*m_rows);
                        nextDotCharge --;
                    }
                    if (nextDotCharge) {
                        CDotLink newLink = CDotLink(currDot, nextDot);
                        if (this->hasCrossLink(newLink)) {
                            if (crossesCount) {
                                crossesCount --;
                            } else {
                                // find another link that is'nt crosses with others
                                crossCharge --;
                                continue; 
                            }
                        }
                        m_links.append(newLink);
                        currDot = nextDot;
                    }
                    break;
                }
            }
            int maxRow = -1;
            int minRow = m_rows;
            int maxCol = -1;
            int minCol = m_rows;
            for (int d = 0; d < dots.count(); ++d) {
                if (rowByDot(dots.at(d)) < minRow)
                    minRow = rowByDot(dots.at(d));
                if (rowByDot(dots.at(d)) > maxRow)
                    maxRow = rowByDot(dots.at(d));
                if (colByDot(dots.at(d)) < minCol)
                    minCol = colByDot(dots.at(d));
                if (colByDot(dots.at(d)) > maxCol)
                    maxCol = colByDot(dots.at(d));
            }
            if (minCol == 0 && minRow == 0 && 
                maxRow == m_rows - 1 && maxCol == m_cols - 1)
                break;
            broadCharge --;
            continue;
        }
    }
    

    На данный момент программа способна генерировать знаки нескольких типов:


    Так же были реализованы следующие помехи:
    • Swap interference — перетасовка фигур
    • Hide center pattern — исчезновение центральной фигуры
    • Thrill interference — дребезжание фигур
    • Color interference — цветовое мерцание (гирлянда)
    • Cover interference — концентрические окружности

    Кроме того, предусмотрена возможность включения подсказки — Tip Settings (искомая фигура «подсвечивается» через указанное время).

    Интерфейс настроек


    После прохождения таблицы показывается статистика. По горизонтали угадывания, по вертикали время. Зелёный цвет — правильный ответ, красный — неверный, жёлтый — была подсказка.

    Отображение статистики


    Пара методических замечаний. Не стоит искать фигуру, разбрасывая взгляд во всех направлениях — это, во-первых, быстро вымотает и, во-вторых, ничего не даст в плане развития фонового внимания. Желательно расслабиться и рассредоточить локус зрительного внимания по всему окну, держа «в уме» искомую фигуру.

    Исходный код на GitHub (Qt 4.8)
    Сборка под Win32
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 25

      +4
      Забавно, спасибо. Заметил, что проще искать по расположению неиспользованных кружочков (для рун), чем по фигуре.
        +3
        Хм, действительно. Не обращал внимания. Вот уж воистину — что одному фон, другому фигура :)
          0
          Зрительно запомнить положение трёх точек проще чем сложной ломанной.
          Кстати за первые полчаса тренировок заметил, что где-то 3 из 20 фигур появляются в одной и той же области.
            0
            Здесь фокус в том, чтобы научиться воспринимать фигуру не по набору характерных признаков, а целиком (по смыслу, если хотите). И тогда получается совершенно другая стратегия поиска — не пробеганием всех позиций, а как бы "снятием слоёв", отфильтровкой либо всего множества сразу, либо увесистых кластеров (описание, конечно, не самое удачное). Иногда бывает просто понимаешь где нужная фигура, ещё не выделив её зрительно из фона. В таком режиме обнаруживается парадоксальная вещь — помехи начинают помогать в поиске (хотя при этом увеличивается вероятность тыкнуть на похожую фигуру, вместо нужной). Кстати, попробуйте потренироваться на прямоугольниках (Symbol Type: Rectangles) — совершенно другие ощущения.
        +1
        Попробовал найти свой пароль для разблокировки. Похожей руны не обнаружил.
          0
          Не удивительно, ведь их целых 409112 варианта!
            0
            Ой, я имел ввиду 204556 =)
          +1
          Было бы интереснее находить, если бы фигуры были повернуты )
          А так, форма и ассоциация помогает найти быстро (первую нашел мгновенно, вторую за секунд 15). И да, я ждал предложенного мной подвоха ))
            0
            Как правило, внимание начинает вихлять начиная с N-ой фигуры (в зависимости от состояния, индивидуальных особенностей и т.п.), если проходить всю таблицу. Буквально, в какой-то момент возникает эффект книги-фиги :). Обычно, поиск идёт волнами — серия, ступор, серия, ступор. Опять же, разные конфигурации формы даются по-разному — какие-то проще, какие-то трудней. Кстати, по поводу ассоциаций — можно пытаться отслеживать момент, когда к форме как таковой подмешивается распознавание чего-то знакомого — ловить зазор осмысления — типа, осваивать «амодально смысловой слой сознания» (особенно хорошо эта штука обнажается, когда настроено исчезновение центральной фигуры).

            По поводу вращения значков — была такая идея, однако тут может возникнуть сложность — одна фигура может повернуться в другую, ей симметричную — то есть может получиться так, что объективно будет непонятно в какой паттерн тыкать. Конечно, вероятность того, что в одной сетке окажутся симметричные фигуры не очень велика, но она есть.

            А так, форма и ассоциация помогает найти быстро

            Как насчёт монотонных форм? :)


            P.S. Есть два способа поиска — по характерным признакам и гештальтом — как бы «схватывая» всю форму целиком. Первый — привычней, второй — мощней (но плохо рефлексируется). В общем и целом (в рамках тренировки) желательно искать вторым способом, даже если первым получается быстрей.
            +1
            Автору на заметку — отличная идея для будильника
              0
              Да, меня тоже бодрит :).
                0
                будильник в том плане, что пока не найдешь нужную картинку — будильник не выключится
                  +2
                  Полагаю, это кончится плохо для устройства, на котором зазвенит подобный будильник :).
                    0
                    Барабанная дробь пальцами и через секунду будильник выключен
                  0
                  Ох, дались всем эти будильники
                    0
                    ну так мода на todo листы уже прошла
                  0
                  По скорости распознавания неожиданно быстрее прочих иероглифы. В порядке падения скорости: Hieroglyph, Belarus, Rune, Polygon, Rectangles, Strokes.
                    +1
                    Так вот чем занимается Ingress заставляя глифовать — развивает периферийное зрение. ;-)
                      0
                      Спасибо, интересный пост, но нужно перезалить
                      image
                      0
                      Прочитал все комментарии, и удивился, что вопрос ещё никем не был задан. Планируется ли версия с онлайн-статистикой, соревнованиями и прочим? =)
                        0
                        Если хотите моё мнение, то я бы не рекомендовал чрезмерно увлекаться этой штукой. 5-10 мин в день (чисто размять веретенообразную извилину :)) — более чем достаточно.
                        +1
                        Ну это же просто замечательная вещь для мобильного приложения.
                        Анонсируете? :)
                          0
                          Я программист-старовер — и в мобильные приложения меня калачом не заманишь. Разве что уважаемые коллеги-хабравчане вдохновятся ;). Программка придумывалась на фоне размышлений о «психонетических языках» (интерфейс натурально приснился). Всё, что замысливал, в принципе, тут сделал. Развивать дальше — душа не лежит (попутными ветрами акциденций увлекло в других направлениях). Поэтому право анонсировать передаю всем, кто захочет — бэзвозмэздно :).
                            0
                            Можно-можно-можно я попробую? :)

                        Only users with full accounts can post comments. Log in, please.