holtern |
2d-преобразования: прямые и обратные 15.09.2010, 16:23 |
|
15/09/10 3
|
Всем привет. Пишу простую программу на js. Работа с 2d-графикой. Для изменений объектов использую матрицы преобразований координат. (поворот, масштаб, перемещение). Хочется, чтобы на объект можно было кликать мышкой. Занялся реализацией, сделал так: 1. Беру координаты мыши. 2. Умножаю на матрицу, обратную матрице преобразований. 3. Вычитаю соответствующие координаты объекта (х,у объекта становятся началом координат) 4. Смотрю, "попал-не попал"
Все работает ок, но если повернуть объект, то можно кликать немного ниже или правее, и все равно "попадать" по нему. Проверил функции перемножения матриц и нахождения обратной матрицы - ошибок не нашел. Может быть, мое предположение, что нужно использовать обратную матрицу, ошибочно?
|
|
|
|
|
holtern |
Re: 2d-преобразования: прямые и обратные 15.09.2010, 22:28 |
|
15/09/10 3
|
Что интересно, нашел обратное преобразование не с помощью стандартного способа (ну, всем известного, с минорами и делением на определитель), а решив систему уравнений - еще раз убедился, что преобразование найдено верно.
Что еще заметил: если двигать объект, вычисляя новые координаты домножением на матрицу перемещения, то все ок. Но если объект до этого был повернут, то расхождение между реальным объектом и тем, что получается обратной матрицей, увеличивается.
Может, кто-нибудь сталкивался с подобной проблемой? Сейчас приходит в голову только погрешность вычислений. Но почему тогда погрешность увеличивается при изменении входных данных при равном количестве вычислений - не понятно...
|
|
|
|
|
holtern |
Re: 2d-преобразования: прямые и обратные 17.09.2010, 08:46 |
|
15/09/10 3
|
Да, я был прав - дело было в погрешности вычислений. Она не увеличивалась при изменении входных данных, она появлялась при использовании чисел с плавающей запятой - обычное дело при вычислениях на компьютере. Достаточно оказалось округлять результаты вычислений до нужного количества знаков после запятой.
|
|
|
|
|
|
Страница 1 из 1
|
[ Сообщений: 3 ] |
|
Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы