![]() |
Нахождение координат мыши
Задача не тривиальная. Мне необходимо найти координаты мыши при её движении. Можно сделать это по событию MOUSE_MOVE, можно по таймеру (задав достаточно малый delay). Но все это натыкается на ту проблему, что плеер отслеживает перемещение курсора достаточно "грубо" при его быстром передвижении ( к примеру, соседние значения координат точек могут быть такими: x0=100, y0=100; x1=110, y1=105) , то есть расстояние между замеренными точками может быть несколько десятков пикселей. Уменьшить дискретность не возможно ни увеличением FPS клипа, ни уменьшением delay - то есть проблема лежит в самом плеере. Насколько я понимаю, единственный способ найти промежуточные значения между контрольными точками - аппроксимация. Самый простой случай - линейная аппроксимация, но при таком подходе соединение всех точек отрезками даст достаточно "ломанную" траекторию, правдоподобным будет применение нелинейной аппрокимации, соединение даст вполне гладкую кривую. Применять для этого кривые Безье? Я не уверен , что это даст правдоподобный результат. Если кто знает, подскажите математический инструмент нахождения промежуточных точек движения курсора. Если конечно он существует :)
|
Такое движение миши это проблема не плеера, а Windows! И, вообще то, это не проблема!
Найдите пару рисовалок на флеше и посмотрите как это там реализовано... |
Каких рисовалок? Где по EnterFrame или по MouseMove идет вызов graphics.lineTo(mouseX, mouseY)? Там эти ломанные видны во всей красе. Или у Вас есть на примете какая то рисовалка с более точной реализацией прорисовки? Поделитесь
|
Корел дро.
|
Код:
someObj.addListener(MouseEvent.MOUSE_MOVE, mouseMoveListener); |
Цитата:
а вообще интересно, вы читаете предыдущие посты?:) |
меняйте дрова у мышки. если у вас пс/2 то можно выставить 200 герц, и обновление мышки на экране будет гораздо чаще. а что качается резких рывков, то система работает с вашей мышкой, на сколько я помню, по умолчанию 100 герц. тоесть замеры движения то дискретные. и иначе быть не может.
что касается аппроксимации, то возьмите учебник по алгоритмизации за 2 семестр, любого вуза. |
BlooDHounD, Вы наиболее правильно поняли мою проблему, спасибо. Я конечно могу менять драйвер, но не могу заставить других. Поэтому вычисление промежуточных значений самый подходящий мне вариант. Но, к сожалению, учебника по алгоритмизации у меня нет, и даже если найду, хотелось бы знать куда копать. Опять же гугл мне бы помог, если б я смог правильно сформулировать свой вопрос.. (хотя бы на языке Шекспира)
|
|
все просто, надо использовать curveTo... между двумя соседними точками. могу выложить готовую рисовалку.
|
updateAfterEvent вас спасет. И не будет никаких ломанных... Так все нормальные рисовалки и делают.
имхо тривиальная |
2ulik, прошу Вас, прочитайте все предыдущие посты (мои) внимательней и прикиньте, что реально делает updateAfterEvent.
2ALiEN_, безусловно, curveTo не даст возникнуть ломаным, остается только малость - знать какие точки брать контрольными, какие - опорными. Как найти промежуточные точки мне поможет Ив Дембицкий http://bezier.ru/ (большой респект!), что собственно мне и необходимо, а не просто нарисовать кривые - это у меня в первом посте акцентировано. Однако, если вы мне хотя бы с curveTo поможете буду благодарен. |
Код:
package У меня с теорией по этой теме туго, но я уверен что в инете подходящей инфы валом, т.к. это не только flash'a касается. |
2badun, рисовать надо именно по точкам, которые дает мышка, все остальные находятся путем вычислений. Полазил по гуглу - выдается много способов сглаживаний ломаных, как с помощью Безье, так и спомощью сплайнов. Остановился на этом способе http://www.antigrain.com/research/be...ion/index.html, так как он вроде бы простой.. Попробую портировать его в AS3. За пример огромное спасибо, буду ковыряться дальше :)
|
Ссылка вообще не о том. Надо искать сглаживание по точкам последовательно, а не готовой фигуры. Либо проводить сглаживание после отрисовки штриха, как во Flash IDE.
По поводу того, что кривая обязательно должна проходить через точки MOUSE_MOVE, ты все-таки заблуждаешься по-моему. Таким способом гладкости можно добиться только если между точками достаточно большое расстояние. |
хм... может так попробовать? очень простой код:)
Код:
package { |
А я говорил что рисовка идет в реальном времени? - мне отставание на одну! точку не имее значения (а этого будет достаточно для расчетов, в принципе, если не крутить мышью в бешеном темпе, это даже не будет заметно) Не помню в какой проге (вроде в Painter'е) эти отставания за мышью очень заметны. Впрочем, если расстояние между точками соизмеримо с диаметром кисти можно переходить на линейную интерполяцию, а там все в реал тайм. Попробую все это воплотить...)
|
Вложений: 1
Вот вроде что вышло в первом приближении по алгоритму http://www.antigrain.com/research/be...ion/index.html
|
| Часовой пояс GMT +4, время: 19:31. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.