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

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




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

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

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

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

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

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

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


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