В настоящее время я работаю в компании-разработчике программного обеспечения, и одной из моих задач было внедрение распознавания жестов мыши. Один из старших разработчиков помог мне начать работу и предоставил код/проекты, в которых используется распознаватель Unistroke Recognizer http://depts.washington.edu/aimgroup/proj/dollar/. Я получаю в широкий способ, что делает распознаватель Unistroke Recognizer и как он работает, но я немного перегружен, пытаясь понять все внутренние детали/более тонкие детали.Как определить все сегменты линии из списка точек, созданных с помощью жестов мыши?
Моя проблема заключается в том, что я пытаюсь распознать жест перемещения мыши вниз, а затем вверх. Распознаватель Unistroke Recognizer $ 1 определяет, что жест, который я создал, был жестом вниз, и это то, что он должен делать. То, что я действительно хотел бы сделать, это сказать: «Я признаю жестом в сборе И ТОГДА вверх жест».
Я не знаю, полностью ли я не понимаю, как распознать Unistroke Recognizer, чтобы я поцарапал себе голову, но есть ли у кого-нибудь какие-либо идеи о том, как распознать два разных жестов при перемещении мыши вниз, а затем вверх?
Вот моя идея, что я думал, что может помочь мне, но будет любить кого-то, кто эксперт или даже знает немного больше, чем я, чтобы сообщить мне, что вы думаете. Любая помощь или ресурсы, о которых вы знаете, были бы очень оценен.
Как Мои приложения В настоящее время работает:
То, как работает мое текущее приложение является то, что я захватить точки, откуда курсор мыши в то время как пользователь удерживает левую кнопку мыши. Затем список точек получает фид к распознавателю жестов, а затем выплескивает то, что он считает лучшей формой/жестом, который координирует захваченные точки.
Моя идея:
То, что я хотел сделать, это прежде, чем я кормлю точки на жест распознаватель, чтобы каким-то образом пройти через все точки и разбить их на отдельные линии или кривые. Таким образом, я мог бы кормить каждую линию/кривую по одному за раз и от основных движений вниз, вверх, влево, вправо, диагоналей и кривых, которые я мог бы определить окончательную форму/жест.
Один из способов, который, как я думал, был бы хорош в определении того, есть ли отдельные лини в моем списке точек, это выборка групп точек и просмотр их наклона. Если наклон выборочной группы точек отличался X% от некоторой другой группы выборочных точек, тогда было бы безопасно предположить, что действительно существует отдельная строка.
что я думаю, возможные проблемы в моем мышлении:
Где определить конец строки и начало отдельной строкой? Если бы я использовал идею проверки наклона группы точек, а затем решил, что существует отдельная строка, которая не означает, что я определенно нашел наклон отдельной строки. Например, если вы должны были нарисовать прямой левый «L» под прямым углом и пробовать наклон точек вокруг угла «L», вы увидите, что наклон даст отчетливое указание на наличие отдельной линии, но эти точки не соответствуют началу отдельной строки.
Как бороться с постоянно меняющимся наклоном изогнутой линии? Изначальный признак, который я использую, обрабатывает кривые уже так, как я этого хочу.Но я не хочу, чтобы мой метод, который я использовал для определения отдельных строк, продолжал искать эти так называемые отдельные строки на кривой, потому что его наклон меняет все время, когда я отбираю группы точек. Могу ли я просто остановить точки отбора проб, как только наклон изменился более чем на X% столько раз подряд?
Я не использую правильный «тип» математики для определения отдельных строк. Математика не моя самая сильная тема, но я сделал некоторые исследования. Я попытался посмотреть в Dot Products и посмотреть, будет ли это указывать на меня в определенном направлении, но я не знаю, будет ли это так. Кто-нибудь использовал Dot Prodcuts для выполнения чего-то подобного или какого-то другого метода?
Заключительные мысли, замечания и спасибо:
Часть моей проблемы, я чувствую, что я не знаю, как compeletly задать свой вопрос. Я не удивлюсь, если эта проблема уже задана (так или иначе), и существует решение, которое может быть Googled. Но мои результаты поиска в Google не предоставили никаких решений, так как я точно не знаю, как задать свой вопрос. Если вы чувствуете, что это сбивает с толку, пожалуйста, дайте мне знать, где и почему, и я помогу прояснить это. При этом, возможно, мои поиски в Google станут более точными, и я смогу найти решение.
Я просто хочу еще раз поблагодарить за чтение своего сообщения. Я знаю его долго, но не знал, где еще спросить об этом. Imma разговаривает с некоторыми другими людьми вокруг офиса, но все мои лучшие решения, которые я использовал в школе, пришли из сообщества StackOverflow, поэтому я очень благодарен вам.
правок это сообщение:
(7/6 4:00 PM) Еще одна идея, которую я думал о сравнивал все точки до точки Min/Max. Например, если бы я переместил мышь вниз, то вверх, то отправной точкой была бы текущая точка Макс, а точка, в которой я начинаю перемещать мышь назад, будет моей минутой. Я мог бы пойти дальше и посмотреть, есть ли какие-то точки после минимальной точки, и если так говорят, что может возникнуть новая потенциальная линия. Я не знаю, как хорошо это будет работать на других формах, таких как звезды, но это еще одна вещь, которую я собираюсь изучить. Кто-нибудь сделал что-то подобное этому раньше?
Вы были бы удовлетворены, если бы ваш Recognizer распознал это как единственный жест «DOWN-UP», или вы действительно хотите, чтобы он нарушил жест в последовательности из двух примитивных жестов: {DOWN, UP}? – Beta
Если я правильно понял, у вас уже есть серия строк, определяемая каждой парой точек, но требует упрощения - только «намеченные» строки. Я предлагаю вам взглянуть на алгоритм упрощения линии Дугласа-Пиккера. Он должен дать вам то, что вы ищете. http://www.cs.sunysb.edu/~algorith/implement/DPsimp/implement.shtml –
Я был бы доволен, если бы он распознал его как единственный жест «DOWN-UP».Но все равно было бы важно знать, как сделать что-то, как записано в моем первоначальном посте, в случае, когда это неудовлетворительно. Спасибо Vitor. Я смотрю на это прямо сейчас. : D – Chris