2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 2d-преобразования: прямые и обратные
Сообщение15.09.2010, 16:23 
Всем привет. Пишу простую программу на js. Работа с 2d-графикой. Для изменений объектов использую матрицы преобразований координат. (поворот, масштаб, перемещение). Хочется, чтобы на объект можно было кликать мышкой. Занялся реализацией, сделал так:
1. Беру координаты мыши.
2. Умножаю на матрицу, обратную матрице преобразований.
3. Вычитаю соответствующие координаты объекта (х,у объекта становятся началом координат)
4. Смотрю, "попал-не попал"

Все работает ок, но если повернуть объект, то можно кликать немного ниже или правее, и все равно "попадать" по нему. Проверил функции перемножения матриц и нахождения обратной матрицы - ошибок не нашел. Может быть, мое предположение, что нужно использовать обратную матрицу, ошибочно?

 
 
 
 Re: 2d-преобразования: прямые и обратные
Сообщение15.09.2010, 22:28 
Что интересно, нашел обратное преобразование не с помощью стандартного способа (ну, всем известного, с минорами и делением на определитель), а решив систему уравнений - еще раз убедился, что преобразование найдено верно.

Что еще заметил: если двигать объект, вычисляя новые координаты домножением на матрицу перемещения, то все ок. Но если объект до этого был повернут, то расхождение между реальным объектом и тем, что получается обратной матрицей, увеличивается.

Может, кто-нибудь сталкивался с подобной проблемой? Сейчас приходит в голову только погрешность вычислений. Но почему тогда погрешность увеличивается при изменении входных данных при равном количестве вычислений - не понятно...

 
 
 
 Re: 2d-преобразования: прямые и обратные
Сообщение17.09.2010, 08:46 
Да, я был прав - дело было в погрешности вычислений. Она не увеличивалась при изменении входных данных, она появлялась при использовании чисел с плавающей запятой - обычное дело при вычислениях на компьютере. Достаточно оказалось округлять результаты вычислений до нужного количества знаков после запятой.

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group